【问题标题】:Only use $in operator if a certain condition is met - Mongoose仅在满足特定条件时才使用 $in 运算符 - Mongoose
【发布时间】:2016-12-30 12:35:13
【问题描述】:

好吧,这可能只是我很愚蠢,没有正确查看 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
    });
}

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

【问题讨论】:

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


    【解决方案1】:

    也许代替:

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

    【讨论】:

    • 非常感谢,条件查询好像搞定了!
    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 2018-01-22
    • 2013-02-21
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多