それらの更新が競合しない限り、同じドキュメントに対して複数の更新を実行できます(したがって、「更新で競合するmodがあります」エラー)。
"$ push":{"bugs":[{"name": "bug1"、 "count":1}]}と "$ inc":{"bugs.0.count":1}は両方ともしようとしているためドキュメントの同じ部分(つまり、「バグ」配列)を変更すると、競合します。
それぞれがドキュメントの異なる部分に影響を与える場合は、複数の更新を組み合わせることができます:
例:
> 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." }
>
更新には3つの異なる操作($ pushAll、$ inc、および$ set)が含まれていましたが、各操作がドキュメントの異なる部分に影響を与えたため、正常に完了できました。
これはあなたが望んでいたことではないことを私は理解していますが、更新がどのように機能するかについて少しよく理解し、更新やドキュメントを再構築して機能を実行する方法についてのアイデアを提供することを願っていますアプリケーションが必要です。幸運を。