のmongodbデータが与えられた場合
{
"_id" : ObjectId("552f283dd951e49c6f2f451d"),
"uuid" : "1-2-1-b95a4040-e29d-11e4-bce8-0381ce4bc8a5",
"sub" : [
{
"prod" : 30,
"var" : 0,
"status" : "Test",
"files" : [
{
"filePath" : "20150415/2-1/21001429153881552f2859699769.82145796.jpg"
},
{
"filePath" : "20150415/2-1/21001429153880552f28589ca9a8.67013013.jpg"
}
]
},
{
"prod" : 10,
"var" : 0,
"status" : "Pending",
"files" : []
}
],
"process_marker" : 3
}
「uuid」が「1-2-1-b95a4040-e29d-11e4-bce8-0381ce4bc8a5」、「sub.prod」:10、「sub.prod」の「sub.status」のステータスを更新したいと思います: 0
通常、以下に示すように、結果のインデックスを変更するために「$」を使用します。
use targetDB
db.collection.update({
"uuid" : "1-2-1-b95a4040-e29d-11e4-bce8-0381ce4bc8a5",
"sub.prod":10,
"sub.var":0
},{
"$set":{"sub.$.status":"MyNewValue"}
})
==== BUT THE CODE ABOVE DOES NOT UPDATE THE CORRECT $ TARGET ====
"prod":30, "var":0 セットを更新します...なぜですか?
以下に示すように、2 つのキーと値のペアのクエリ条件を制限すると、正しい配列セットが更新されます
use targetDB
db.collection.update({
"uuid" : "1-2-1-b95a4040-e29d-11e4-bce8-0381ce4bc8a5",
"sub.prod":10
},{
"$set":{"sub.$.status":"MyNewValue"}
})
==== THE CODE ABOVE UPDATES THE CORRECT $ TARGET ====
より詳細な検索クエリを使用すると、間違った配列セットが更新されることに混乱しています。これはバグですか、それとも何か間違ったことをしましたか?
MongoDB バージョン: 3.0.2