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
您可以如下聚合,关键是使用:$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)