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}). 

双引号不应该在那里。