汇总-展开多个字段

时间:2018-08-07 14:59:20

标签: mongodb aggregation-framework

我有一些输入数据:

    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"]
  }

有没有办法进行汇总?

1 个答案:

答案 0 :(得分:1)

您可以在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"}}
]