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 :)
ACTUALIZAR a partir de V2.2, la función de actualización toma la siguiente forma:
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
La respuesta seleccionada ya no se aplica.
https://docs.mongodb.com/manual/reference/method/db.collection.update/