J'ai été surpris de constater que l'exemple de code suivant ne met à jour qu'un seul document:
> 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
Je sais que je peux suivre en boucle les mises à jour jusqu'à ce qu'elles soient toutes modifiées, mais cela semble terriblement inefficace. Y a-t-il un meilleur moyen?
La mise à jour multiple a été ajoutée récemment, elle est donc uniquement disponible dans les versions de développement (1.1.3). Depuis le shell, effectuez une mise à jour multiple en passant true
en tant que quatrième argument à update()
, le troisième argument étant l'argument upsert:
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
Pour les versions de mongodb 2.2+, vous devez définir l'option multi true afin de mettre à jour plusieurs documents à la fois.
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
Pour les versions de mongodb 3.2+, vous pouvez également utiliser la nouvelle méthode updateMany()
pour mettre à jour plusieurs documents à la fois, sans avoir besoin de l'option multi
séparée.
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
UPDATE à partir de la V2.2, la fonction de mise à jour prend la forme suivante:
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
La réponse sélectionnée ne s'applique plus.
https://docs.mongodb.com/manual/reference/method/db.collection.update/
Pour version Mongo> 2.2 , ajoutez un champ multi et définissez-le sur true
db.Collection.update({query},
{$set: {field1: "f1", field2: "f2"}},
{multi: true })
J'ai créé un moyen de faire cela avec une meilleure interface.
db.collection.find({ ... }).update({ ... })
- mise à jour multipledb.collection.find({ ... }).replace({ ... })
- remplacement simpledb.collection.find({ ... }).upsert({ ... })
- single upsertdb.collection.find({ ... }).remove()
- multi removeVous pouvez également appliquer une limite, ignorer, trier les mises à jour et les supprimer en les chaînant préalablement.
Si vous êtes intéressé, consultez Mongo-Hacker
MongoDB ne trouvera qu'un seul document correspondant qui correspond aux critères de la requête lorsque vous émettez une commande de mise à jour, le premier des documents correspondants étant mis à jour en premier, même s'il existe d'autres documents correspondant aux critères qui seront ignorés.
pour surmonter ce problème, nous pouvons spécifier l’option "MULTI" dans votre instruction de mise à jour, ce qui signifie mettre à jour tous les documents qui correspondent aux critères de la requête. recherche tous les documents de la collection en recherchant ceux qui correspondent aux critères et les met à jour:
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
Dans le client MongoDB, tapez:
db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
Nouveau dans la version 3.2
Paramètres ::
{}: select all records updated
Argument de mot clé multi
non pris
J'ai eu le même problème, et j'ai trouvé la solution, et ça marche comme un charme
il suffit de mettre le drapeau multi à true comme ceci:
db.Collection.update(
{_id_receiver: id_receiver},
{$set: {is_showed: true}},
{multi: true} /* --> multiple update */
, function (err, updated) {...});
j'espère que ça aide :)
Vous pouvez utiliser.
Model.update({
'type': "newuser"
}, {
$set: {
email: "[email protected]",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
}) `
Pour les versions de mongodb 3.2+, vous pouvez utiliser la méthode updateMany () pour mettre à jour plusieurs documents.
http://answerexpress.blogspot.com/2018/09/mongodb-how-to-update-multiple.html
Toutes les dernières versions de mongodb updateMany () fonctionne correctement
db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});