5

「oid」フィールドと「instance」フィールドが一致する場合、サブドキュメントの「value」フィールドで複数の更新を実行したいと思います。一度に 1 つのサブドキュメントを実行できますが、複数のサブドキュメントを実行する方法はありますか

-- これは 1 つで機能します --

db.myTable.update({ "data" : { "$elemMatch" : { "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", 
                                                "instance" : "0" } }, 
                    "$atomic" : "true" },
                  { $set: { "data.$.value": "change good" }}, 
                  false, 
                  true);



  "_id" : 483,
  "data" : [{
      "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3",
      "instance" : "0",
      "value" : "0"
    }, {
      "oid" : "1.3.6.1.4.1.111.3.999.2.5.2",
      "instance" : "0",
      "value" : "aaa"
    }, {
      "oid" : "1.3.6.1.4.1.111.3.30.5.1.1",
      "instance" : "0",
      "value" : "BBB"
    }]}
4

1 に答える 1

8

この質問はすでに数回尋ねられていますが、いいえ、一度にこれを行うことはできません. 答えを繰り返すには:

ドキュメントをクエリし、ネストされたすべてのドキュメントをループすることにより、アプリケーション コードでこれを自分で行う必要があります。それを MongoDB に保存します。

これによる競合状態を防ぐために、 http://www.mongodb.org/display/DOCS/Atomic+Operationsの比較と交換のセクションをご覧ください。

現在、この機能を MongoDB に追加するためのオープン チケットがあります。賛成票を投じることもできます: https://jira.mongodb.org/browse/SERVER-1243

于 2012-05-22T10:29:13.773 に答える