MongoDB和Node.js中的dynamic查询
我正在使用后端Mongodb的nodejs / express应用程序。 在我的一个API调用中,取决于是否存在特定查询string参数,或者其他我想用$ 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)
有没有办法dynamic创build查询,而不是实际做两个不同的查询?
以编程方式构build您的查询对象:
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+支持计算属性名称 ,您可以按照以下步骤创buildquery
:
var query = { film_id: {$in: genre}, _id: {[param ? '$lt' : '$gt']: tokenId} };
上面的代码可能无法正常工作。 上面的dynamic查询将被parsing为下面的Ex。 令牌是一个整数35。
collection.find("_id":"{$gt: 35}") .sort({'_id': -1}).limit(25).toArray(function(error, films);
导致错误
正确的语法应该是:
collection.find("_id":{$gt: 35}).
双引号不应该在那里。