可以說我有一個集合的文檔「MyCollection的」結構是這樣的:MongoDB的更新與位置操作
{
_id: ...,
Items: [
{
Field1: ...,
Field2:...,
Value: 0
}
]
}
我想,當我得到_id匹配更新域「值」,項目.Field1和Item.Field2。
這裏是我的查詢:
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一個:如果我只保留其中之一,它是考慮到正常。 但是,如果我把它們都放在一起,就好像第一個被滑過...