我当然搜索了整个网站,但似乎有关于什么是“子文档”的令人困惑的术语......
想象一下,我们有两个集合(Pages和Items),其中包含以下模式:
Item:
_id: ObjectId
name: String
Page:
_id: ObjectId
titles: [ {value: String} ]
items: [ Relationship <Item>, many: true ]
如果我尝试更新“titles”子阵列 - 一切正常:
db.pages.update({_id: ...}, { $set: {"titles.0.value": "x"} });
但如果我尝试更新“items”子文档 - 数组 - 它会失败:
db.pages.update({_id: ...}, { $set: {"items.0.name": "x"} });
返回错误:
"cannot use the part (0 of items.0.name) to traverse the element"
如果我尝试用这样的“$”替换“0”:
db.pages.update({_id: ...}, { $set: {"items.$.name": "x"} });
返回另一个错误:
"The positional operator did not find the match needed from the query. Unexpanded update: items.$.name"
如何正确更新相关子文档中的值?