MongoDB和Node.js中的动态查询

Raj*_*Raj 6 mongodb node.js express mongodb-query

我正在后端使用Mongodb处理nodejs/express应用程序.在我的一个API调用中,根据特定查询字符串参数的存在或另一个,我想使用$ gt或$ lt向Mongodb发出查询.

在某些情况下,我们要求的所有内容都少于tokenId使用$ lt,但在其他情况下,我们希望所有内容都比tokenId使用$ gt 更大.如果不重复查询,我们如何做到这一点?

这是一个示例查询:

collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films)
Run Code Online (Sandbox Code Playgroud)

有没有办法动态创建查询而不实际执行2个不同的查询?

Joh*_*yHK 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);
Run Code Online (Sandbox Code Playgroud)

更新

既然Node.js 4+支持计算属性名称,您可以query一步创建:

var query = {
    film_id: {$in: genre},
    _id: {[param ? '$lt' : '$gt']: tokenId}
};
Run Code Online (Sandbox Code Playgroud)