【问题标题】:MongoDB: Use an aggregation to multiply all values in a group togetherMongoDB:使用聚合将组中的所有值相乘
【发布时间】:2018-02-10 05:02:53
【问题描述】:

我将如何编写一个 mongodb 聚合查询来获取组中一组值的乘积(换句话说,将它们全部相乘)。

例如,假设我有一个文档列表,例如

_id: "1"
number: 12

_id: "2"
number: 3

_id: "3"
number: 6

我想基本上做以下事情:

db.documents.aggregate([
    $group: {
        product: { $multiplyAll: "$number" }
    }
])

根据我的示例文档,此查询将导致 (12 * 3 * 6) = 216

我的 $multiplyAll 聚合器的等效聚合是什么?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    目前这在小组赛阶段是不可能进行这样的操作的。参考here

    您将需要在$addFields 阶段将$push 值后跟$reduce 以输出3.4 版本中的计算值。

    $reduce$multiply 的所有数组元素。

    db.documents.aggregate([
     {
        "$group": {
          "_id": null,
          "numbers": {
            "$push": "$number"
          }
        }
      },
      {
        "$addFields": {
          "product": {
            "$reduce": {
              "input": "$numbers",
              "initialValue": 1,
              "in": {
                "$multiply": [
                  "$$value",
                  "$$this"
                ]
              }
            }
          }
        }
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2011-04-12
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      相关资源
      最近更新 更多