仅从 MongoDB 中的嵌套数组中检索查询对象
Retrieve only the queried object from nested array in MongoDB
我的 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"
}
]
]
]
}
有什么建议吗?
您需要使用“$unwind”。
此答案将帮助您了解更多详细信息 Mongodb unwind nested documents ( 指定这应该适用于 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”。
我的 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"
}
]
]
]
}
有什么建议吗?
您需要使用“$unwind”。
此答案将帮助您了解更多详细信息 Mongodb unwind nested documents ( 指定这应该适用于 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”。