【问题标题】:Aggregation - Unwind multiple fields聚合 - 展开多个字段
【发布时间】:2018-08-07 14:59:20
【问题描述】:

我有一些输入数据:

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

有什么方法可以进行聚合吗?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案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"}}
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-16
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多