在我的Mongo中有以下文档我正在尝试获取具有指定id的对象。这是我的Mongo文档。 Mongo版本:2.6
{
"_id" : ObjectId("57c1ae9ac1bd31d4eb4d546d"),
"footers" : [
{
"type" : "web",
"rows" : [
{
"id" : "abc",
"elements" : [
{
"id" : "def",
"type" : "image",
"url" : "http://example.com"
},
{
"id" : "ghi",
"type" : "image",
"url" : "http://example.com"
}
]
}
]
}
]
}
我正在寻找一个id为“def”的对象,我希望得到这个结果:
{
"id" : "def",
"type" : "image",
"url" : "http://example.com"
}
下面我引用我尝试搜索此对象的代码示例。
db.getCollection('myCollection').aggregate([
{"$match": {
"footers.rows.elements.id": "def"
}},
{"$group": {
"_id": "$footers.rows.elements"
}}
])
结果是:
{
"_id" : [
[
[
{
"id" : "def",
"type" : "image",
"url" : "http://example.com"
},
{
"id" : "ghi",
"type" : "image",
"url" : "http://example.com"
}
]
]
]
}
有什么建议吗?
答案 0 :(得分:2)
您需要使用“$unwind”。
这个答案将为您提供更多详细信息Mongodb unwind nested documents(https://stackoverflow.com/a/12241733/224743指定这应该适用于MongoDB 2.2 +)
对于您的具体示例,您可以执行以下操作:
db.getCollection('myCollection').aggregate([
{"$match" : { "footers.rows.elements.id": "def" }},
{"$unwind" : "$footers"},
{"$unwind" : "$footers.rows"},
{"$unwind" : "$footers.rows.elements"},
{"$group" : { "_id": "$footers.rows.elements" }},
{"$match" : { "_id.id": "def" }}
]);
注意多个“$ unwind”链接以及重新应用$ unwind-ed文档条件所需的最终“$ match”。