【发布时间】:2015-08-27 07:57:57
【问题描述】:
我似乎在访问嵌套在 mongodb 文档中的数组中的数组内容时遇到问题。使用如下查询访问第一个数组“组”没有问题...
db.orgs.update({_id: org_id, "groups._id": group_id} , {$set: {"groups.$.name": "new_name"}});
当我尝试修改嵌套在“group”数组中的数组“features”中元素的属性时,我遇到了麻烦。
这是一个示例文档的样子
{
"_id" : "v5y8nggzpja5Pa7YS",
"name" : "Example",
"display_name" : "EX1",
"groups" : [
{
"_id" : "s86CbNBdqJnQ5NWaB",
"name" : "Group1",
"display_name" : "G1",
"features" : [
{
_id : "bNQ5Bs8BWqJn6CdNa"
type : "blog",
name : "[blog name]"
owner_id : "ga5YgvP5yza7pj8nS"
},
]
},
]
},
这是我尝试使用的查询。
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "qBX3KDrtMeJGvZWXZ", "groups.features._id":"bNQ5Bs8BWqJn6CdNa" }, {$set: {"groups.$.features.$.name":"New Blog Name"}});
它返回一条错误消息:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "Too many positional (i.e. '$') elements found in path 'groups.$.features.$.name'"
}
})
看来mongo不支持通过位置元素修改嵌套在数组中的数组?
有没有一种方法可以修改这个数组,而不用把整个东西拿出来,修改它,然后把它放回去?像这样的多重嵌套是创建新集合的标准做法吗? (即使只有在需要父数据时才需要数据)我是否应该更改文档结构以便第二个嵌套数组是一个对象,并通过键访问它? (其中键是一个整数值,可以充当“_id”)
groups.$.features.[KEY].name
什么被认为是“正确”的做法?
【问题讨论】:
标签: arrays mongodb object schema