MongoDB 聚合:条件聚合阶段

Yul*_*ale 1 mongodb mongodb-query aggregation-framework

是否可以根据聚合返回的变量设置条件聚合阶段?

例如

User.aggregate([
    // if user has a property verified that returns true run aggregation pipeline
    // one. Else run aggregation pipeline 2.
])
Run Code Online (Sandbox Code Playgroud)

mat*_*Pen 7

当然,您可以通过将$facet与 2 个不同的管道一起使用,并为每个第一阶段放置一个带有属性验证的 $match 阶段。

下面是此类查询的示例:

db.collection.aggregate([
  {
    "$facet": {
      "avgSteps": [
        {
          "$match": {
            hasCar: false
          }
        },
        {
          $project: {
            steps: {
              $avg: "$walks.steps"
            }
          }
        }
      ],
      "sumDistance": [
        {
          "$match": {
            hasCar: true
          }
        },
        {
          $project: {
            sumKm: {
              $sum: "$travels.distance"
            }
          }
        }
      ],
      
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下。

  • 有时,当我在这个网站上提出问题时,我会感到惊讶。老实说,我认为我必须寻找解决方法。但后来,我不这么认为。因为有人有解决办法。大多数情况下,解决方案既简单又有效。这个平台给了我很大的价值。非常感谢您的回答。 (3认同)