鉴于此 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 }
}
我一直在尝试使用聚合框架(以替换现有的 map/reduce)来做到这一点,但只能获得组合的计数,即
{ '_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 的聚合框架达到我想要的输出吗?
对于任何可能提供的帮助,请提前非常感谢!