varios update operaciones masivo insertar documentos datos consultas complejas campo busquedas agregar actualizar mongodb document nosql

update - MongoDB: ¿Cómo actualizar varios documentos con un solo comando?



mongodb operaciones (10)

En el cliente MongoDB, escriba:

db.Collection.updateMany({}, $set: {field1: ''field1'', field2: ''field2''})

Nuevo en la versión 3.2

Params ::

{}: select all records updated

Palabra clave argumento multi no tomada

Me sorprendió descubrir que el siguiente código de ejemplo solo actualiza un solo documento:

> db.test.save({"_id":1, "foo":"bar"}); > db.test.save({"_id":2, "foo":"bar"}); > db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}}); > db.test.find({"test":"success!"}).count(); 1

Sé que puedo seguir y seguir actualizando hasta que todos hayan cambiado, pero eso parece terriblemente ineficiente. ¿Hay una mejor manera?


Gracias por compartir esto, lo utilicé con 2.6.7 y la siguiente consulta acaba de funcionar,

para todos los documentos:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})

para solo documento:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})


He creado una forma de hacer esto con una mejor interfaz.

  • db.collection.find({ ... }).update({ ... }) - actualización múltiple
  • db.collection.find({ ... }).replace({ ... }) - reemplazo único
  • db.collection.find({ ... }).upsert({ ... }) - upsert simple
  • db.collection.find({ ... }).remove() - multi remove

También puede aplicar limit, skip, sort a las actualizaciones y eliminar encadenándolas de antemano.

Si estás interesado, echa un vistazo a Mongo-Hacker


La actualización múltiple se agregó recientemente, por lo que solo está disponible en las versiones de desarrollo (1.1.3). Desde el intérprete de órdenes, realiza una actualización múltiple pasando true como el cuarto argumento para update() , donde el tercer argumento es el argumento upsert:

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);

Para las versiones de mongodb 2.2+, debe establecer la opción multi verdadero para actualizar varios documentos a la vez.

db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})

Para las versiones de mongodb 3.2+, también puede usar el nuevo método updateMany() para actualizar varios documentos a la vez, sin la necesidad de multi opción multi separada.

db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})


MongoDB encontrará solo un documento coincidente que coincida con los criterios de consulta cuando se está emitiendo un comando de actualización, el que coincida con el primero se actualice, incluso si hay más documentos que coinciden con los criterios se ignorarán.

para superar esto podemos especificar la opción "MULTI" en su declaración de actualización, es decir, actualizar todos los documnets que coincidan con los criterios de consulta. escanee todos los documnets en la colección encontrando los que coinciden con los criterios y actualice:

db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )


Para la versión de Mongo> 2.2 , agregue un campo múltiple y configúrelo en verdadero

db.Collection.update({query}, {$set: {field1: "f1", field2: "f2"}}, {multi: true })


Puedes usar.

Model.update({ ''type'': "newuser" }, { $set: { email: "[email protected]", phoneNumber:"0123456789" } }, { multi: true }, function(err, result) { console.log(result); console.log(err); }) `


Todas las últimas versiones de mongodb updateMany () funcionan bien

db.getCollection(''workers'').updateMany({},{$set: {"assignedVehicleId" : "45680"}});


Tuve el mismo problema, y ​​encontré la solución, y funciona como un encanto

simplemente configure el indicador multi como verdadero:

db.Collection.update( {_id_receiver: id_receiver}, {$set: {is_showed: true}}, {multi: true} /* --> multiple update */ , function (err, updated) {...});

Espero que eso ayude :)