【问题标题】:Dynamic queries in MongoDB and Node.jsMongoDB 和 Node.js 中的动态查询
【发布时间】:2012-11-19 15:09:37
【问题描述】:

我正在开发一个后端有 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 个不同查询的情况下动态创建查询?

【问题讨论】:

    标签: node.js mongodb express mongodb-query


    【解决方案1】:

    以编程方式构建您的查询对象:

    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}
    };
    

    【讨论】:

      【解决方案2】:

      上面的代码可能不起作用。上述动态查询将解析为以下 Ex。 token 是一个整数 35。

      collection.find("_id":"{$gt: 35}")
                .sort({'_id': -1}).limit(25).toArray(function(error, films); 
      

      导致错误

      正确的语法应该是:

      collection.find("_id":{$gt: 35}).  
      

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

      【讨论】:

      • 欢迎来到 SO。您的帖子应该是评论或可能是编辑,而不是答案。或者,如果您仍然卡住,请发布一个新问题。
      猜你喜欢
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2016-12-23
      • 2015-04-09
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多