我有一个文档集合,例如:
{_id: 1, kind: 'cow', nickname: 'bess', weight: 145}
{_id: 2, kind: 'cow', nickname: 'babs', weight: 130}
{_id: 3, kind: 'horse', nickname: 'boris', weight: 140}
{_id: 4, kind: 'horse', nickname: 'gnoris', weight: 110}
我想通过'kind'字段对它们进行分组,然后返回每组中体重最大的动物的昵称,该组中的最大体重以及该组中的动物数量,从而返回:
{'kind': 'cow', 'nickname': 'bess', 'max_weight': 145, 'count': 2}
{'kind': 'horse', 'nickname': 'boris', 'max_weight': 140, 'count': 2}
我可以看到如何使用以下mongo聚合返回每个组的最大权重和计数:
db.aggregate([
{'$group': {'_id': '$kind',
'max_weight': {'$max': '$weight'},
'count': {'$sum': 1}}}
])
是否有一种方法可以让这个聚合返回每个组中最重的动物的相应昵称?
使用 $sort
代替 $max
返回整个文档和引用, $first
:
db.collection.aggregate([
{ "$sort": { "weight": -1 } },
{ "$group": {
"_id": "$kind",
"max_weight": { "$first": "$weight" },
"nickname": { "$first": "$nickname" },
"count": { "$sum": 1 }
}}
])
这确保"分组边界"上的文档值由您给$first
的参数返回。由于$sort
按"weight"降序排列