Mongo可以汇总这些数据:
cat type subtype count
A aa 1 10
A aa 2 20
A ac 4 15
B ac 3 30
C aa 3 40
C aa 5 50
D ac 6 60
D aa 2 70
进入如下所示的文档:
{
'A': {
'count': 45,
'types': [
{'type': 'aa', count:'30'},
{'type': 'ac', count:'15'},
]
},
'B': {
'count': 30,
'types': [
{'type': 'ac', count:'30'},
]
},
'C': {
'count': 90,
'types': [
{'type': 'ac', count:'90'},
]
},
'D': {
'count': 130,
'types': [
{'type': 'ac', count:'60'},
{'type': 'aa', count:'70'},
]
}
}
基本上,首先按type
创建嵌套组,然后按cat
创建嵌套组,同时在每个分组级别运行count
总计(如果有人熟悉D3,那么&# 39; s具有多个键的rollup
函数可以做什么。)
答案 0 :(得分:0)
在意识到我可以在管道中有多个$ group命令后,我最终解决了这个问题。第一个$组按(cat, type)
汇总,第二个$ group汇总第一个(cat)
的结果。有点像:
db.mycollection.aggregate([
{
$group: {
_id: {'cat':'$cat','type':'$type'},
'total': {$sum: $count}
}
},
{
$group: {
_id: $_id.cat,
types: {$push: {type: $_id.type, total: $total}},
total: {$sum: $total}
}
},
{
$project: {
_id: 0,
cat: $_id.cat
types: 1,
total: 1
}
}
])
答案 1 :(得分:0)
只是为了修复 Dmrity 自己的答案,因为其中有一些不同的错别字:
db.collection.aggregate([
{
$group: {
_id: {
cat : "$cat",
type : "$type"
},
total: {
$sum: "$count"
}
}
},
{
$group: {
_id: "$_id.cat",
types: {
$push: {
type: "$_id.type",
total: "$total"
}
},
total: {
$sum: "$total"
}
}
},
{
$project: {
_id: 0,
cat: "$_id",
types: 1,
total: 1
}
}
])