【问题标题】:SQL equivalent queries in MongoDBMongoDB 中的 SQL 等效查询
【发布时间】:2022-01-11 03:17:02
【问题描述】:

我正在将我的 SQL 查询转换为 MongoDB。我有以下 SQL 语句,它检查输入并相应地执行查询。

(score_min = -1 OR Scores BETWEEN score_min AND score_max)

Scores 是一个字段名称,我要对其进行过滤
仍然无法找出在 MongoDB 聚合管道中执行此查询的最佳方式。请问有什么建议吗?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以在简单的find 中使用$expr 实现该行为。不是必须使用聚合管道。

    db.collection.find({
      $expr: {
        $or: [
          {
            // $eq: [<score_min>, -1]
            $eq: [
              <score_min>,
              -1
            ]
          },
          {
            $and: [
              {
                // $gte: ["$Scores", <score_min>]
                $gte: [
                  "$Scores",
                  <score_min>
                ]
              },
              {
                $lte: [
                  // $gte: ["$Scores", <score_max>]
                  "$Scores",
                  <score_max>
                ]
              }
            ]
          }
        ]
      }
    })
    

    这是Mongo playground 供您参考。

    【讨论】:

    • $eq: [15, -1] 毫无意义,它永远不可能是真的。
    • @WernfriedDomscheit 它只是一个占位符,15 是score_min 的值。但是你提出了一个很好的观点,我应该让我的答案更清楚。谢谢!
    • @ray 有效...感谢您的回答...
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多