如果满足某个条件,则仅使用$ in运算符 - Mongoose

时间:2016-12-30 12:35:13

标签: javascript node.js mongodb mongoose query-string

好的,所以这可能只是我愚蠢而没有正确浏览MongoDB文档,但无论如何这里的交易

我有一个RESTful API路由,如下所示:

GET /api/users?ids[]=id1&ids[]=id2

将其解析为如下所示的对象:

var parsedObject = {ids: ['id1', 'id2']}

这将从查询字符串返回具有指定ID的用户。现在,我希望这是可选的,所以像这样的请求也可以是有效的:

GET /api/users

在mongoose中,为了找到具有指定id(如果有)的用户,我需要在查询时使用$in运算符,如下所示:

UserSchema.find()
  .where('_id').in(req.query.ids)
  .exec(function(err, users){
    //some code
  });

但是,当req.query.ids不存在时,它不会返回所有文档,而是返回任何内容。

我已经尝试过这样的事情:

var queryIds = req.query.ids || {};

如果$in存在,我该如何使用req.query.ids?当然,必须有比做这样的事情更好的方法:

if (req.query.ids) {
  UserSchema.find()
    .where('_id').in(req.query.ids)
    .exec(function(err, users){
      //some code
    });
} else {
  UserSchema.find()
    .exec(function(err, users){
      //some code
    });
}

我希望这是有道理的...感谢您的时间!

1 个答案:

答案 0 :(得分:0)

也许代替:

var queryIds = req.query.ids || {};

试试这个:

var queryIds = req.query.ids || [];

因为它应该是一个数组而不是一个对象。

但很可能你必须做一个条件查询,可能是这样的:

UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}