Me sorprendí al encontrar que el ejemplo de código siguiente se actualiza sólo 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 mantener la actualización hasta que está todo cambiado, pero que parece terriblemente ineficiente. Hay una manera mejor?

InformationsquelleAutor Luke Dennis | 2009-11-16

10 Comentarios

  1. 200

    Multi actualización se ha añadido recientemente, por lo que sólo está disponible en las versiones en desarrollo (1.1.3). A partir de la cáscara de hacer un multi actualización pasando true como el cuarto argumento a update(), donde el tercer argumento es el upsert argumento:

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

    Para las versiones de mongodb 2.2+ usted necesita para establecer la opción de multi fiel a la actualización de 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 utilizar el nuevo método updateMany() a la actualización de varios documentos a la vez, sin la necesidad de separar multi opción.

    db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
    • Ah, perfecto. No es urgente, así que voy a esperar a la oficialmente la versión estable. Gracias!
    • Tal vez debería actualizar esta respuesta.
    • No estoy seguro acerca de cuándo se produjo este cambio, pero, Mongodb v2.2.2 ¿esta un poco diferente. db.de la colección.actualización( <query>, <actualizar>, <opciones> ), donde las opciones es un conjunto de claves los pares de valores. Consulte la documentación: docs.mongodb.org/manual/applications/update
    • lo que si quiero ajustar diferentes valores para diferentes documento? hay un alegant manera de hacerlo?
    • Ya trató de actualización de la respuesta. Me rechazaron…
    • .updateMany es genial
    • Cómo hacerlo para oldvalue+»cadena»
    • Me estoy quedando en la v2.6.7, y updateMany obras que hay en ella

  2. 13

    Para Mongo versión > 2.2, agregar un campo de múltiples y se establece en true

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

    He creado una manera para hacer esto con una mejor interfaz.

    • db.collection.find({ ... }).update({ ... }) — multi actualización
    • db.collection.find({ ... }).replace({ ... }) — de reemplazo
    • db.collection.find({ ... }).upsert({ ... }) — solo upsert
    • db.collection.find({ ... }).remove() — multi quitar

    También se puede aplicar el límite, de saltar, de ordenar a las actualizaciones y elimina por el encadenamiento de ellos de antemano.

    Si usted está interesado, echa un vistazo Mongo-Hacker

    • TypeError: db.getCollection(…).encontrar(…).la actualización no es una función de : ?
    • no trabajó 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 :
  4. 4

    En la MongoDB Cliente, tipo:

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

    De nuevo en la versión 3.2

    Params::

    {}:  select all records updated

    Palabra clave argumento multi no se toman

  5. 3

    MongoDB se encuentra un único documento correspondiente que coincide con los criterios de consulta cuando se emite un comando de actualización, cualquiera sea el documento que coincide con la primera pasa a ser actualizado, incluso si hay más documentos que coincide con los criterios de ser ignorado.

    así que para superar esto podemos especificar «MULTI» opción en la instrucción update, lo que significa la actualización de todos los documnets que coincide con los criterios de consulta. la detección de todas las documnets en la colección de encontrar aquellos que coincide con los criterios y actualización :

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

    Tuve el mismo problema , y he encontrado la solución , y funciona como un encanto

    acaba de establecer el indicador multi verdadero como este :

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

    espero que ayude 🙂

  7. 0

    Puede usar».

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

    Todas las últimas versiones de mongodb updateMany() está trabajando bien

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

    Gracias por compartir esto, he usado con 2.6.7 y siguientes de la consulta sólo funcionaba,

    para todos los docs:

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

    para una sola doc:

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

Dejar respuesta

Please enter your comment!
Please enter your name here