MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

operatore di aggiornamento mongo multiplo in una singola istruzione?

È possibile eseguire più aggiornamenti sullo stesso documento, a condizione che tali aggiornamenti non siano in conflitto (da cui l'errore "hanno mod in conflitto nell'aggiornamento").

Perché "$push" :{"bugs" :[{"name":"bug1", "count":1}]} e "$inc" :{"bugs.0.count" :1} stanno entrambi tentando di modificare la stessa parte del documento (vale a dire l'array "bug"), sono in conflitto.

È possibile combinare più aggiornamenti se ciascuno interessa una parte diversa del documento:

ad esempio:

> 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." }
> 

L'aggiornamento conteneva tre diverse operazioni ($pushAll, $inc e $set), ma è stato in grado di completare correttamente, poiché ogni operazione ha interessato una parte diversa del documento.

Mi rendo conto che questo non è esattamente quello che speravi di fare, ma spero che ti fornisca una migliore comprensione di come funzionano gli aggiornamenti e forse fornisca alcune idee su come i tuoi aggiornamenti e/o documenti potrebbero essere ristrutturati per eseguire la funzionalità che il tuo l'applicazione richiede. In bocca al lupo.