首页 > 解决方案 > 聚合 - 展开多个字段

问题描述

我有一些输入数据:

    Brand   | Model   | Number
    Peugeot | 208     | 1
    Peugeot | 4008    | 2
    Renault | Clio    | 3
    Renault | Megane  | 4

我希望每一行都有一个新列,其中包含每个公司的总和(以便获得给定品牌的模型百分比):

Brand   | Model   | Number | Total
Peugeot | 208     | 1      | 3
Peugeot | 4008    | 2      | 3
Renault | Clio    | 3      | 7
Renault | Megane  | 4      | 7

我试图做这样的事情,但没有奏效:

  {
    $group: {
      _id: { Brand: "$Brand" },
      Model: { $push: "$Model"},
      Number: { $push: "$Number"},
      Total: { $sum: "$Number" }
    }
  },
  {
    $unwind: 
      path: ["$Model", "$Number"]
  }

有没有办法我可以做我的聚合?

标签: mongodbaggregation-framework

解决方案


您可以在 3.6 中使用以下聚合。

$$ROOT访问整个文档,然后$addFields将 Total 字段添加到文档并将$unwind合并 $replaceRoot文档提升到顶部。

[{"$group":{
  "_id":{"Brand":"$Brand"},
  "data":{"$push":"$$ROOT"},
  "Total":{"$sum":"$Number"}
}},
{"$unwind":"$data"},
{"$addFields":{"data.Total":"$Total"}},
{"$replaceRoot":{"newRoot":"$data"}}
]

推荐阅读