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

Resuelto itsme asked hace 13 años • 8 respuestas

¿Cómo puedo agregar 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 mongoshell?

itsme avatar Oct 10 '11 21:10 itsme
Aceptado

Igual que la actualización del campo de colección existente, $setagregará 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 nuevo campo a toda su colección, debe usar un selector vacío y establecer el indicador múltiple en verdadero (ú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, trueespecifican las banderas upserty multi.

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

Multi: si se establece en verdadero, actualiza varios documentos que cumplen con los criterios de consulta. Si se establece en falso, actualiza un documento.

Esto es para Mongo versionsantes de 2.2. Para las últimas versiones la consulta ha cambiado un poco.

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 
RameshVel avatar Oct 10 '2011 14:10 RameshVel

Desde la versión 3.2 de MongoDB puedes usar updateMany() :

> db.yourCollection.updateMany({}, {$set:{"someField": "someValue"}})
qwertz avatar Sep 09 '2020 14:09 qwertz