首页 > 解决方案 > 如何聚合 MongoDB 的最终总和?从之前计算的总和

问题描述

如何汇总最终的总和?从之前计算的总和

这是原始结果。

[
  {
    "name": "a",
    "prices": 10,
  },
  {
    "name": "a",
    "prices": 20,
  }
]

但我需要这样做。

[
  {
    "name": "a",
    "prices": 10,
  },
  {
    "name": "a",
    "prices": 20,
  },
//i need to do more//
  {
    "name": "total",
    "total":30
  }

]

这是示例图片。

在此处输入图像描述

标签: javamongodbmongoosemongodb-queryaggregation-framework

解决方案


  • $group通过 null 并在 中构造根文档数组docs,得到总价totalPrices
  • 使用concat 当前docs价格和总价格 doc$concatArrays
  • $unwind解构docs数组
  • $project显示来自docs对象的两个字段
db.collection.aggregate([
  {
    $group: {
      _id: null,
      docs: { $push: "$$ROOT" },
      totalPrices: { $sum: "$prices" }
    }
  },
  {
    $project: {
      docs: {
        $concatArrays: [
          "$docs",
          [
            {
              name: "total",
              prices: "$totalPrices"
            }
          ]
        ]
      }
    }
  },
  { $unwind: "$docs" },
  {
    $project: {
      _id: 0,
      name: "$docs.name",
      prices: "$docs.prices"
    }
  }
])

操场


推荐阅读