1. ホーム

[解決済み】mongodbで複数の配列要素を更新する方法

2022-04-19 02:02:13

質問

要素の配列を保持する Mongo ドキュメントがあります。

をリセットしたい。 .handled 属性は、配列内のすべてのオブジェクトの .profile = XXとする。

ドキュメントは以下のような形式になっています。

{
    "_id": ObjectId("4d2d8deff4e6c1d71fc29a07"),
    "user_id": "714638ba-2e08-2168-2b99-00002f3d43c0",
    "events": [{
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 10,
            "data": "....."
        } {
            "handled": 1,
            "profile": 20,
            "data": "....."
        }
        ...
    ]
}

ということで、以下を試してみました。

.update({"events.profile":10},{$set:{"events.$.handled":0}},false,true)

ただし、更新されるのは 最初 にマッチした配列要素を、それぞれのドキュメントで使用します。(これは $ - 位置演算子 .)

を更新するにはどうすればよいですか? すべて マッチした配列要素

解決方法は?

UPDATEしてください。 Mongo バージョン 3.6 では、この問題は修正され、これを実現する方法があるため、この回答は無効となります。他の回答を参照してください。


現時点では、位置演算子を使用して配列内のすべての項目を更新することはできません。JIRA を参照してください。 http://jira.mongodb.org/browse/SERVER-1243

回避策として、できます。

  • 各項目を個別に更新する (events.0.handled events.1.handled) ...) または...
  • ドキュメントを読み、編集を行う を手動で作成し、それを保存して 古いもの(チェック 更新する場合 Current" を確保したい場合は アトミックアップデート)