繁体   English   中英

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

[英]Only use $in operator if a certain condition is met - Mongoose

好的,这可能只是我愚蠢而没有正确浏览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 || {};

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

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
    });
}

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

也许代替:

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
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM