の更新は、私は、文書のコレクション「myCollection」は、このように構成されているとしましょう.Field1とItem.Field2。ここでのMongoDBは、位置演算子で
私のクエリです:いつかフィールド値は次の応答で更新されていない
db['myCollection'].update({
"_id" : BinData(3, "xxx"),
"Items.Field1" : ISODate("2016-05-01T00:00:00.000+0000"),
"Items.Field2" : BinData(3, "yyy")
},
{
$set : {
"Items.$.Value" : NumberInt(11)
}
}
)
いつかそれが動作します、:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
項目が発見されたが、変更されていませんか? ...
この場合「$」は分かりますが、配列のインデックスは正しいと思いますが、問題は「_id」基準に関するものでしょうか?
私は$ set式が間違っていると思われます:$ setが{"_id":BinData(3、 "xxx")}のドキュメントをターゲットにしているかどうかわかりませんか?
どうもありがとう
編集 修正する必要があるフィールドが既に値が設定されているためwriteResult.Modifiedが偽であると思われます。 実際には、Field1とField2の基準については、変更された項目は常に同じです:私のケースのItems.0.Value。 アイテムの配列の一部ではない最初の条件 "_id"が原因である可能性がありますか?
編集 フィールド2の基準はフィールド1 1をオーバーライドしているように私には思える:私はどちらか一方のみのを続ける場合は、それが適切に考慮されます。 しかし、もし私がそれらの両方を保っていれば、最初のものがスキップされたかのようです。