varios valor registros que modificar mas insertar inserta documentos documento datos como collection campo agregar actualizar mongodb

mongodb - registros - Agregar un nuevo campo a una colección con el valor de un campo existente



mongodb modificar documento (4)

No, no es posible. Solo dos pasos es lo que probablemente sepas:

  1. Cargar documento, leer campo. (solo puede cargar campos específicos : _id , y se created en su caso si el rendimiento es un problema)
  2. Actualización atómica del documento (establecer event_ts usando el campo created cargado)

Me gustaría agregar un nuevo campo a una colección, con el valor del nuevo campo establecido al valor de un campo existente.

Específicamente, me gustaría pasar de esto:

# db.foo.findOne() { "_id" : ObjectId("4f25c828eb60261eab000000"), "created" : ISODate("2012-01-29T16:28:56.232Z"), "..." : ... }

a esto:

# db.foo.findOne() { "_id" : ObjectId("4f25c828eb60261eab000000"), "created" : ISODate("2012-01-29T16:28:56.232Z"), "event_ts" : ISODate("2012-01-29T16:28:56.232Z"), #same as created "..." : ... }

(Los nuevos documentos en esta colección no tendrán todos esta redundancia peculiar, pero quiero hacer esto para mis documentos existentes)


Si es una cosa de una sola vez, no es gran cosa. Ejecute una consulta como "db.foo.find ();" en su mongo shel y pegue toda la salida en un editor como Textpad o Sublime text, haga un bloque de columnas (en el texto sublime es Ctrl + rueda de desplazamiento, haga clic y arrastre), pegue lo que se extenderá a otro campo, cambie el nombre del nuevo pegue la columna como desee, una vez hecho, haga una expresión regular para editar todo el grupo como "^" con "db.foo.insert ({" y en "$" como "});"

Es como los siguientes pasos.

  1. Usted pegó la salida como {''field1'': value, ''field2'': value2, ''field3'': value4};
    1. copie el último conjunto y extiéndalo utilizando el bloque de columnas del editor {''campo1'': valor, ''campo2'': valor2, ''campo3'': valor4};
    2. Ahora inserte las palabras apropiadas para que se vea como un comando para mongo db.foo.insert ({''field1'': value, ''field2'': value2, ''field3'': value4});
    3. Ahora cópialos todos y pégalos en tu shell mongo, que hará todo lo que necesites para ti. Pruébelo una vez y vuelva a hacer todo justo después de limpiar la colección, de lo contrario insertará duplicados. También elimine los campos "_id" en la salida, ya que entrarán en conflicto cuando intente insertarlo nuevamente.

Ahora, cada línea en su editor muestra un comando mongo válido que se puede pegar en su shell para insertar un nuevo documento en su colección. así que pruébelo una vez y funciona bien, limpie toda su colección como "db.foo.remove ({});" y pega todo el comando desde el editor que lo hará en un giffy.

Puede ser difícil cuando lo intentas por primera vez, pero si lo haces bien, será una cosa útil para que trabajes siempre que lo desees ... !!


ya que su código ya sabe cómo manejar los eventos, ¿por qué necesita copiar los datos? puede cambiar el nombre del campo en su lugar:

{ $rename : { old_field_name : new_field_name } }

Ver http://www.mongodb.org/display/DOCS/Updating


function addEventTsField(){ db.foo.find().forEach(function(doc){ db.foo.update({_id:doc._id}, {$set:{"event_ts":doc.created}}); }); }

Ejecutar desde la consola:

addEventTsField();