鉴于这种MongoDB的集合:是否可以使用MongoDB的聚合框架对多列进行分组和汇总?
[
{ character: 'broquaint', race: 'Halfling', class: 'Hunter' },
{ character: 'broquaint', race: 'Halfling', class: 'Hunter' },
{ character: 'broquaint', race: 'Halfling', class: 'Rogue' },
{ character: 'broquaint', race: 'Naga', class: 'Fighter' },
{ character: 'broquaint', race: 'Naga', class: 'Hunter' }
]
我想获得每个种族和阶级即
{
race: { 'Halfling': 3, 'Naga': 2 },
class: { 'Hunter': 3, 'Rogue': 1, 'Fighter': 1 }
}
的计数,并且我一直在尝试这种使用聚合框架(以 做取代现有的地图/减少),但只能得到至今为 获得组合计数,即
{ '_id': { race: 'Halfling', class: 'Hunter' }, count: 2 }
{ '_id': { race: 'Halfling', class: 'Rogue' } count: 1 }
{ '_id': { race: 'Naga', class: 'Fighter' }, count: 1 }
{ '_id': { race: 'Naga', class: 'Hunter' }, count: 1 }
这很简单,以编程方式减少到期望的 结果,但我希望能够将它留给MongoDB。
仅供参考这里的代码,我到目前为止有:
db.games.aggregate(
{ '$match': { character: 'broquaint' } },
{
'$group': {
_id: { race: '$race', background: '$background'},
count: { '$sum': 1 }
}
}
)
所以,问题是 - 考虑到例如收集我可以在我的 所需的输出到达完全通过MongoDB的聚合框架?
对于任何可能提前致谢的帮助!
什么是“$背景”?类? –
对不起,在代码中它应该读取“类”而不是“背景”,列名实际上是“背景”,但我选择“类”为简洁起见我只是失败的一致性。 – broquaint