仅在满足特定条件时才使用 $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']}
这 returns 具有查询字符串中指定 ID 的用户。现在,我希望这是可选的,这样这样的请求也可能有效:
GET /api/users
在mongoose中,为了找到具有指定ids的用户(如果有),我需要在查询时使用$in
运算符,如下所示:
UserSchema.find()
.where('_id').in(req.query.ids)
.exec(function(err, users){
//some code
});
但是,当 req.query.ids
不存在时,它不会返回所有文档,而是 returns 什么都没有。
我已经试过这样的东西了:
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
});
}
好吧,这可能只是我太蠢了,没有正确查看 MongoDB 文档,但无论如何 这是交易:
我有一条 RESTful API 路线,如下所示:
GET /api/users?ids[]=id1&ids[]=id2
它被解析为如下所示的对象:
var parsedObject = {ids: ['id1', 'id2']}
这 returns 具有查询字符串中指定 ID 的用户。现在,我希望这是可选的,这样这样的请求也可能有效:
GET /api/users
在mongoose中,为了找到具有指定ids的用户(如果有),我需要在查询时使用$in
运算符,如下所示:
UserSchema.find()
.where('_id').in(req.query.ids)
.exec(function(err, users){
//some code
});
但是,当 req.query.ids
不存在时,它不会返回所有文档,而是 returns 什么都没有。
我已经试过这样的东西了:
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
});
}