【发布时间】:2015-11-16 14:24:06
【问题描述】:
给定一个像这样的集合:
{
"_id": "XXXX",
"JobId": [
100
],
"PersonalDetails": [
{
"Level": 1,
"Zone": [
{
"Id": 1,
"Code": "XXXXXXXX",
"IsAvailable": true
},
{
"Id": 45,
"Code": "ZZZZZZZZZ",
"IsAvailable": false
}
]
}
],
"Timestamp": ISODate("2015-11-01T00:00:00.000Z")
}
我需要获取所有将 IsAvailable 标志设置为 true 的区域 ID 和代码。
我尝试了以下方法:
var details = db.test.find(
{
JobId: {$in: [100]},
'PersonalDetails': {$elemMatch: {Zone : {$elemMatch: {IsAvailable: true}}}}
},
{
'PersonalDetails.Zone.Id': 1,
'PersonalDetails.Zone.Code': 1,
'PersonalDetails.Zone.IsAvailable': 1
});
details.forEach(function(doc){
var myDetails = doc.PersonalDetails;
myDetails.forEach(function(doc2){
var myZones = doc2.Zone;
print(myZones);
这给了我
{
"0" : {
"Id": 1,
"Code": "XXXXXXXX",
"IsAvailable": true
},
"1" : {
"Id": 45,
"Code": "ZZZZZZZZZ",
"IsAvailable": false
}
}
但我只希望返回 IsAvailable 标志设置为 true 的位置。
我是不是走错路了??我尝试使用聚合,但遇到了同样的问题 - 返回所有而不过滤 IsAvailable 标志。
【问题讨论】:
标签: javascript mongodb mongodb-query aggregation-framework