我需要根据用户输入使用聚合函数从MongoDB的多级文档中获取数据,但未获得预期的结果。我在下面提供文件格式。
{
"zone_list":[{
"zone":'NORTH',
"state_list":[{
"state":"DELHI",
"location_list":[{
"location":"NEW DELHI",
"task_list":[{
"login_id":"9937229853"
},{
"login_id":"9937229854"
}]
},{
"location":"AIRPORT",
"task_list":[{
"login_id":"9937229855"
}]
}]
},{
"state":"JK",
"location_list":[{
"location":"NEW JK",
"task_list":[{
"login_id":"9937229856"
},{
"login_id":"9937229857"
}]
},{
"location":"AIRPORT JK",
"task_list":[{
"login_id":"9937229858"
}]
}]
}]
},{
"zone":'EAST',
"state_list":[{
"state":"WB",
"location_list":[{
"location":"KOLKATA",
"task_list":[{
"login_id":"9937229859"
},{
"login_id":"9937229850"
}]
},{
"location":"ASAM",
"task_list":[{
"login_id":"9937229895"
}]
}]
},{
"state":"ODISHA",
"location_list":[{
"location":"BHUBANESWAR",
"task_list":[{
"login_id":"9937229844"
},{
"login_id":"9937229845"
}]
},{
"location":"AIRPORT BBSR",
"task_list":[{
"login_id":"9937229846"
}]
}]
}]
}]
}
以上是我在数据库中插入的文档。在这里,我需要通过匹配区域,状态和位置来过滤数据。假设用户已输入zone='NORTH' and state='DELHI' and location='AIRPORT'
,因此应提取相应的记录。我正在使用以下查询,但未找到预期的输出。
db.collection.aggregate([
{$match:{}},
{$unwind:"$zone_list"},
{$unwind:"$state_list"},
{$match:{zone:zoneInput,state:stateInput}}])
.toArray((err,docs)=>{
if (!err) {
res.send(docs);
}
})
在这里,我得到的是空白输出。我需要用户输入zone,state and location
作为输入,将检索相应的结果。
答案 0 :(得分:2)
看起来state_list
嵌套在zone_list
内,所以这里是第二个$unwind
,请尝试:
db.collection.aggregate([
{
$unwind: "$zone_list"
},
{
$unwind: "$zone_list.state_list"
},
{
$match: {
"zone_list.zone": "NORTH",
"zone_list.state_list.state": "DELHI",
"zone_list.state_list.location_list.location": "AIRPORT"
}
}
])