mongodb - 聚合 - 展开多个字段
问题描述
我有一些输入数据:
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"]
}
有没有办法我可以做我的聚合?
解决方案
您可以在 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"}}
]
推荐阅读
- flutter - 在 Flutter 中创建特定的时间变量
- javascript - 为什么这个smoothscript javascript会在底部创建一个空白?
- r - 用不同的 y 尺度覆盖直方图
- api - API 网关如何通过自省验证访问令牌
- c++ - 错误:使用通用引用的声明冲突
- php - 如何检查表是否已经在 Laravel Query Builder 中有 where 子句?
- java - 为什么 GetExternalFileDirs 在 android 中不起作用?
- linker - 使用 ASAN 构建 glib 库
- android - 在 Wifi Direct 中过滤对等点(设备)列表
- javascript - 按空格分割,但将换行符作为一个单独的实体