按一个字段分组并计算另一个字段的不同值

Hat*_*sut 1 mongodb

SO 有很多与此类似的问题,但我不确定哪些(如果有)与我的问题相同。

我有一个收藏

{name: 'amy', age:19}
{name: 'bob', age:80}
{name: 'bob', age:80}
{name: 'chris', age:31}
{name: 'chris', age:20}
Run Code Online (Sandbox Code Playgroud)

我想获取每个 的不同 值的数量。所以我想回来agename

{'amy': 1, 'bob': 1, 'chris': 2}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用and进行aggregate查询,但我不能完全正确。groupsum

Bat*_*eam 6

您可以如下聚合,关键是使用:$addToSet运算符,累积不同的年龄,然后使用$size运算符获取每个名称(组)的不同年龄的数量。

db.t.aggregate([
{$group:{"_id":"$name","ages":{$addToSet:"$age"}}},
{$project:{"name":"$_id","_id":0,"count":{$size:"$ages"}}}
])
Run Code Online (Sandbox Code Playgroud)