Javascript 仅在满足特定条件时使用$in运算符-Mongoose

Javascript 仅在满足特定条件时使用$in运算符-Mongoose,javascript,node.js,mongodb,mongoose,query-string,Javascript,Node.js,Mongodb,Mongoose,Query String,好吧,这可能只是因为我太傻了,没有正确地查看MongoDB文档,但无论如何事情是这样的: 我有一个RESTful API路由,如下所示: GET /api/users?ids[]=id1&ids[]=id2 var parsedObject = {ids: ['id1', 'id2']} var queryIds = req.query.ids || {}; if (req.query.ids) { UserSchema.find() .where('_id').in(

好吧,这可能只是因为我太傻了,没有正确地查看MongoDB文档,但无论如何事情是这样的

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

GET /api/users?ids[]=id1&ids[]=id2
var parsedObject = {ids: ['id1', 'id2']}
var queryIds = 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
    });
}
UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}
将其解析为如下所示的对象:

GET /api/users?ids[]=id1&ids[]=id2
var parsedObject = {ids: ['id1', 'id2']}
var queryIds = 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
    });
}
UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}
这将从查询字符串返回具有指定ID的用户。现在,我希望这是可选的,这样的请求也可以有效:

GET /api/users
在mongoose中,为了找到具有指定ID(如果有)的用户,我需要在查询时使用
$In
操作符,如下所示:

UserSchema.find()
  .where('_id').in(req.query.ids)
  .exec(function(err, users){
    //some code
  });
但是,当
req.query.ids
不存在时,它不返回所有文档,而不返回任何内容

我已经尝试过这样的东西:

GET /api/users?ids[]=id1&ids[]=id2
var parsedObject = {ids: ['id1', 'id2']}
var queryIds = 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
    });
}
UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}
只有当
req.query.ids
存在时,我才能在
中使用
$in
?肯定有比这样做更好的方法:

GET /api/users?ids[]=id1&ids[]=id2
var parsedObject = {ids: ['id1', 'id2']}
var queryIds = 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
    });
}
UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}
我希望这是有意义的。。。谢谢你的时间

也许可以代替:

var queryIds = req.query.ids || {};
试试这个:

var queryIds = req.query.ids || [];
因为它应该是数组而不是对象

但最有可能的情况是,您必须执行条件查询,可能是这样的:

GET /api/users?ids[]=id1&ids[]=id2
var parsedObject = {ids: ['id1', 'id2']}
var queryIds = 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
    });
}
UserSchema.find(req.query.ids ? {_id: {$in: req.query.ids}} : {})
    .exec(function(err, users){
      //some code
    });
}

非常感谢,条件查询似乎已经完成了!