[英]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.