MongoDB: Comment mettre à jour plusieurs documents en une seule commande?
J'ai été surpris de constater que l'exemple de code suivant uniquement les mises à jour d'un document unique:
> 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 en boucle et à maintenir à jour jusqu'à ce qu'ils sont tout a changé, mais cela semble terriblement inefficace. Est-il un meilleur moyen?
Vous devez vous connecter pour publier un commentaire.
Multi mise à jour a été ajouté récemment, ce qui n'est disponible que dans les versions de développement (1.1.3). À partir de la coquille de vous faire un multi de mise à jour en passant
true
que le quatrième argument deupdate()
, où le la troisième argument est le upsert argument:Pour les versions de mongodb 2.2+, vous devez définir l'option multi true pour mettre à jour plusieurs documents à la fois.
Pour les versions de mongodb 3.2+ vous pouvez également utiliser la nouvelle méthode
updateMany()
de mettre à jour plusieurs documents à la fois, sans la nécessité de séparermulti
option.updateMany
le travailleMise à JOUR V2.2, la fonction de mise à jour prend la forme suivante:
La réponse sélectionnée ne s'applique plus.
https://docs.mongodb.com/manual/reference/method/db.collection.update/
Pour Mongo version > 2.2, ajouter un champ multi et attribuez la valeur true
J'ai créé un moyen de le faire avec une meilleure interface.
db.collection.find({ ... }).update({ ... })
multi -- mise à jourdb.collection.find({ ... }).replace({ ... })
-- remplacement uniquedb.collection.find({ ... }).upsert({ ... })
-- single upsertdb.collection.find({ ... }).remove()
- multi supprimerVous pouvez également appliquer de la limite, de sauter, de tri pour les mises à jour et supprime par la chaîne à l'avance.
Si vous êtes intéressé, consultez Mongo-Hacker
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 :
Dans la MongoDB Client, type:
Nouveau dans la version 3.2
Params::
Argument mot-clé
multi
pas prisMongoDB trouver un seul document correspondant qui correspond aux critères de la requête lorsque vous émettez une commande de mise à jour, quel que soit le document correspond à la première qui arrive à être mis à jour, même si il y a plus de documents qui correspond aux critères sera ignoré.
donc, pour surmonter cela, nous pouvons spécifier "MULTI" option dans votre mise à jour de l'énoncé, le sens de mise à jour de tous ceux documnets qui correspond aux critères de la requête. de l'analyse pour tous les documnets dans la collecte de trouver ceux qui correspondent aux critères et mise à jour :
J'ai eu le même problème , et j'ai trouvé la solution , et il fonctionne comme un charme
il suffit de régler l'indicateur multi true comme ceci :
j'espère que cela aide 🙂
Vous pouvez utiliser.`
Toutes les dernières versions de mongodb updateMany() fonctionne bien
Merci pour ce partage, j'ai utilisé avec 2.6.7 et à la suite de la requête juste travaillé,
pour tous les docs:
pour seul doc: