可以说我有一个集合的文档“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一个:如果我只保留其中之一,它是考虑到正常。 但是,如果我把它们都放在一起,就好像第一个被滑过...