Me sorprendió descubrir que el siguiente código de ejemplo solo actualiza un único 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 recorrer y seguir actualizando hasta que todos cambien, pero eso parece terriblemente ineficiente. ¿Hay una mejor manera?
A partir de la v3.3 Puede usar updateMany
En v2.2, la función de actualización toma la siguiente forma:
https://docs.mongodb.com/manual/reference/method/db.collection.update/
fuente
Para la versión Mongo> 2.2 , agregue un campo múltiple y configúrelo como verdadero
fuente
He creado una forma de hacer esto con una mejor interfaz.
db.collection.find({ ... }).update({ ... })
- actualización múltipledb.collection.find({ ... }).replace({ ... })
- reemplazo individualdb.collection.find({ ... }).upsert({ ... })
- upsert simpledb.collection.find({ ... }).remove()
- multi removeTambién puede aplicar límite, omitir, ordenar a las actualizaciones y elimina encadenándolas de antemano.
Si estás interesado, echa un vistazo a Mongo-Hacker
fuente
db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
En el cliente MongoDB, escriba:
Nuevo en la versión 3.2
Parámetros ::
Argumento de palabra clave
multi
no tomadofuente
MongoDB encontrará solo un documento coincidente que coincida con los criterios de consulta cuando emita un comando de actualización, el documento que coincida primero se actualizará, incluso si hay más documentos que coincidan con los criterios serán ignorados.
para superar esto, podemos especificar la opción "MULTI" en su declaración de actualización, lo que significa actualizar todos esos documentos que coincidan con los criterios de consulta. busque todos los documnets en la colección y encuentre los que coincidan con los criterios y actualice:
fuente
El siguiente comando puede actualizar múltiples registros de una colección
fuente
Tuve el mismo problema y encontré la solución, y funciona de maravilla
solo establezca la bandera multi en true de esta manera:
Espero que eso ayude :)
fuente
Para actualizar toda la colección,
fuente
Puedes usar.`
fuente
Todas las últimas versiones de mongodb updateMany () funcionan bien
fuente
Gracias por compartir esto, utilicé con 2.6.7 y la siguiente consulta simplemente funcionó,
para todos los documentos:
para un solo documento:
fuente