{
"_id" : ObjectId("5b4d815ad85250f4e502d142"),
"company_Name" : "Rishabh Instruments",
"spaces" : [
{
"_id" : "11",
"name" : "Trishala",
"spaces" : [
{
"_id" : "111",
"name" : "ESL"
},
{
"_id" : "112",
"name" : "IS"
}
]
},
{
"_id" : "12",
"name" : "Riddhi",
"spaces" : [
{}
]
},
{
"name" : "XYZ",
"spaces" : [
{}
]
}
]
}
这是我在Mongo DB中的文档结构,它可能具有高达N级的子文档,因此现在我想访问以ESL和IS命名的文档。所以我该怎么做才能通过下面的查询升至第二级
db.space.aggregate([
{$match: {company_Name: 'Rishabh Instruments'}},
{$unwind: '$spaces'},
{$match: {'spaces.name': 'Trishala'}}
// {$unwind: '$spaces'},
// {$match: {'spaces.name': 'ESL'}}
])
但是如果我取消注释这两行,那么它不会返回任何东西 所以任何人都可以指导我或提供任何提示。
答案 0 :(得分:0)
我尝试了以下解决方案,并且按预期工作,我可以通过链接密钥进入第N级,因为我的情况是密钥为空格
db.space.aggregate([
{$match: {company_Name: 'Rishabh Instruments'}},
{$unwind: '$spaces'},
{$match: {'spaces.name': 'Trishala'}},
{$unwind: '$spaces.spaces'},
{$match: {'spaces.spaces.name': 'ESL'}}
])
答案 1 :(得分:0)
尝试使用带有投影的汇总查询来匹配您提供的示例输出:
db.space.aggregate([
{$match: {company_Name: 'Rishabh Instruments'}},
{$unwind: '$spaces'},
{$match: {'spaces.name': 'Trishala'}},
{$unwind: '$spaces.spaces'},
{$match: {$or : [{'spaces.spaces.name': 'ESL'},{'spaces.spaces.name': 'IS'}]}},
{$project : {_id : 0, _id :'$spaces.spaces._id', name:'$spaces.spaces.name'}}
])
输出:
{ "_id" : "111", "name" : "ESL" }
{ "_id" : "112", "name" : "IS" }