我正在后端使用Mongodb处理nodejs / express应用程序。在我的一个API调用中,根据特定查询字符串参数的存在或另一个,我想使用$ gt或$ lt。
向Mongodb发出查询。在某些情况下,我们希望使用$ lt来询问低于tokenId
的所有内容,但在其他情况下,我们希望所有内容都大于使用$ gt的tokenId
。如果不重复查询,我们如何做到这一点?
以下是一个示例查询:
collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films)
有没有办法动态创建查询而不实际执行2个不同的查询?
答案 0 :(得分:17)
以编程方式构建查询对象:
var query = {'film_id': {$in : genre}};
if (param) {
query._id = {$lt: tokenId};
} else {
query._id = {$gt: tokenId};
}
collection.find(query).sort({'_id': -1}).limit(25).toArray(function(error, films);
<强>更新强>
现在Node.js 4+支持computed property names,您可以一步创建query
:
var query = {
film_id: {$in: genre},
_id: {[param ? '$lt' : '$gt']: tokenId}
};
答案 1 :(得分:0)
以上代码可能无效。以上动态查询将解析为以下Ex。令牌是整数35。
collection.find("_id":"{$gt: 35}")
.sort({'_id': -1}).limit(25).toArray(function(error, films);
导致错误
正确的语法应为:
collection.find("_id":{$gt: 35}).
双重“”引号不应该在那里。