MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

plusieurs opérateurs de mise à jour mongo dans une seule instruction ?

Plusieurs mises à jour peuvent être effectuées sur le même document, tant que ces mises à jour ne sont pas en conflit (d'où l'erreur "avoir des mods en conflit dans la mise à jour").

Parce que "$push" :{"bugs" :[{"name":"bug1", "count":1}]} et "$inc" :{"bugs.0.count" :1} tentent tous les deux de modifier la même partie du document (à savoir le tableau "bugs"), ils entrent en conflit.

Plusieurs mises à jour peuvent être combinées si chacune affecte une partie différente du document :

par exemple :

> db.test.drop()
true
> db.test.save({ "_id" : 1, "name" : "albert", "bugs" : [ ] })
> db.test.update({"name":"albert"}, {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}, "$inc" : {"increment" : 1}, $set:{"note":"Here is another field."}})
> db.test.find()
{ "_id" : 1, "bugs" : [ { "name" : "bug1", "count" : 1 } ], "increment" : 1, "name" : "albert", "note" : "Here is another field." }
> 

La mise à jour contenait trois opérations différentes ($pushAll, $inc et $set), mais a pu se terminer avec succès, car chaque opération affectait une partie différente du document.

Je me rends compte que ce n'est pas exactement ce que vous espériez faire, mais j'espère que cela vous permettra de mieux comprendre le fonctionnement des mises à jour et peut-être de vous donner quelques idées sur la façon dont vos mises à jour et/ou documents peuvent être restructurés pour exécuter la fonctionnalité que votre l'application l'exige. Bonne chance.