Wiele aktualizacji może być przeprowadzanych na tym samym dokumencie, o ile te aktualizacje nie powodują konfliktu (stąd błąd „posiadają sprzeczne mody w aktualizacji”).
Ponieważ "$push" :{"bugs" :[{"name":"bug1", "count":1}]} i "$inc" :{"bugs.0.count" :1} próbują modyfikować tę samą część dokumentu (mianowicie tablicę „błędów”), powodują konflikty.
Wiele aktualizacji można łączyć, jeśli każda z nich ma wpływ na inną część dokumentu:
na przykład:
> 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." }
>
Aktualizacja zawierała trzy różne operacje ($pushAll, $inc i $set), ale zakończyła się pomyślnie, ponieważ każda operacja wpływała na inną część dokumentu.
Zdaję sobie sprawę, że nie jest to dokładnie to, na co liczyłeś, ale mam nadzieję, że zapewni to nieco lepsze zrozumienie działania aktualizacji i być może podpowie kilka pomysłów, w jaki sposób Twoje aktualizacje i/lub dokumenty mogą zostać zrestrukturyzowane w celu wykonywania funkcji, które aplikacja wymaga. Powodzenia.