MongoDB和Node.js中的动态查询

时间:2012-12-01 16:45:51

标签: node.js mongodb express mongodb-query

我正在后端使用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个不同的查询?

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

双重“”引号不应该在那里。