¿Cómo puedo agregar un nuevo campo a cada documento en 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?
Igual que la actualización del campo de recopilació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 true, 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 cambia un poco
db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 
new_fieldque ser un int igual a la longitud de la cadena en eltestcampo.Para aclarar, la sintaxis es la siguiente para MongoDB versión 4.0.x:
Aquí hay un ejemplo de trabajo que agrega un campo publicado a la colección de artículos y establece el valor del campo en verdadero :
fuente
Pymongo 3.9+
update()ya no se utiliza y se debe utilizarreplace_one(),update_one()oupdate_many()en su lugar.En mi caso, usé
update_many()y resolvió mi problema:De documentos
fuente