data=[{
locId: '332wn',
locadetails: [
{ loc: 'ny',
status: true
},
{ loc: 'ca',
status: null
},
{ loc: 'tx',
status: null
}
]
}]
我有以下查询,试图查找所有打开值为null或false的locdetails
Loc.find({'locId': id}, {'locadetails' : {$elemMatch: {'status': {$ne: true}}}}, (err, locs)=>{
if(err) {
retrun callback(err);
}
callback(null, locs)
});
我遇到的问题是此查询将仅返回一个值为0的lo尾值,而它应该返回两个值(如数据所示)。 请让我知道该怎么做,这样我就可以获得状态字段为null或false的整个项目数组。谢谢
答案 0 :(得分:0)
$elemMatch
将根据条件从数组中返回第一个匹配元素。请改用Aggregation。
$运算符和$ elemMatch运算符都投影第一个 根据条件匹配数组中的元素。 Reference
Loc.aggregate([
{ $match: { "locId": "332wn" } },
{ $unwind: "$locadetails" },
{ $match: { "locadetails.status": { $ne: true } } },
{ $group: { _id: "$_id", locId: { $first: "$locId" }, locadetails: { $push: "$locadetails" }, } }
])