带Mongoose的Node.js返回一个对象值而不是数组中的多个对象值

时间:2019-02-20 07:28:14

标签: javascript node.js express mongoose

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的整个项目数组。谢谢

1 个答案:

答案 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" }, } }
])