Agregar un nuevo campo a cada documento de una colección MongoDB


¿Cómo puedo añadir un nuevo campo a cada documento de una colección existente?

Sé cómo actualizar el campo de un documento existente, pero no cómo agregar un nuevo campo a cada documento de una colección. ¿Cómo puedo hacer esto en el shell mongo?

Author: ndmeiri, 2011-10-10

1 answers

Igual que el campo de actualización de la colección existente, $set agregará nuevos campos si el campo especificado no existe.

Mira este ejemplo:

> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }

EDITAR:

En caso de que desee agregar un new_field a toda su colección, debe usar el selector vacío y establecer multi flag en true (último parámetro) para actualizar todos los documentos

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

EDITAR:

En el ejemplo anterior, los últimos 2 campos false, true especifican upsert y multi bandera.

Upsert: Si se establece en true, crea un nuevo documento cuando ningún documento coincide con los criterios de consulta.

Multi: Si se establece en true, actualiza varios documentos que cumplen los criterios de consulta. Si se establece en false, actualiza un documento.

Esto es para Mongo versions antes de 2.2. Para las últimas versiones la consulta se cambia un poco

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 
 414
Author: RameshVel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 00:27:02