はのは、私はこのような文書があるとしましょう戻る:配列内のサブ文書の中のMongoDBアップサートおよび更新サブドキュメント
{
"_id" : ObjectId(1234),
"name": "foo",
"bars": [
{ "name": "n1", "myBool": true },
{ "name": "n2", "myBool": false },
{ "name": "n3", "myBool": false }
]
}
私はname
(または全体サブドキュメントを見つけたいと思い、それは本当に問題ではありません)そして、bars
の最初のサブ文書のmyBool
〜true
は、アトミック操作で与えられた_id
の場合は現在false
です。たとえば、上記のデータを使用して、n2
を返信し、_id
がObjectId(1234)
に等しい文書のmyBool
〜true
をn2
に設定したいとします。
どうすればこの問題を解決できますか?
サブドキュメントの代わりに、文書全体を返すだけに微調整することができますか?私。どのサブ文書(名前)が変更されたのか知りたい。 – Johan
残念ながら、アトミックアップデートではできません。配列を手動でフィルタリングする必要があります。つまり、2つの別々のクエリを実行する必要があります。1. "_id"の文書を見つけるには:1234、 "bars.myBool":false } 'そして、 。 2つの文書を取得すると、 'bars'配列のサブ文書の違いを見つけることができます。 – chridam
残念ながら、2つ以上のスレッドがこれを同時に実行できるため、これは非常に並行した環境では機能しません。私。別のスレッドが "myBool"も更新していて、変更されたスレッドがどれかわからないので、結果を最初に読み込んで比較することはできません。 – Johan