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

时间:2016-02-08 21:00:59

标签: mongodb

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

我有一个集合

{name: 'amy', age:19}
{name: 'bob', age:80}
{name: 'bob', age:80}
{name: 'chris', age:31}
{name: 'chris', age:20}

我想获得每个age不同 name值的数量。所以我想回来

{'amy': 1, 'bob': 1, 'chris': 2}

我一直在尝试使用aggregategroup进行sum次查询,但我无法做到正确。

1 个答案:

答案 0 :(得分:3)

您可以按以下方式进行汇总,关键是使用:$addToSet运算符,以累积不同的年龄,然后使用$size运算符获取每个名称(组)的不同年龄的数量

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