mongo 最大 y 的聚合字段 x

mongo aggregation field x with max y

我有一个文档集,例如:

{_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' 字段对它们进行分组,然后 return 每组中体重最大的动物的昵称,组中的最大体重,以及该组中的动物数量,因此 returning:

{'kind': 'cow', 'nickname': 'bess', 'max_weight': 145, 'count': 2}
{'kind': 'horse', 'nickname': 'boris', 'max_weight': 140, 'count': 2}

我可以看到如何使用以下 mongo 聚合 return 每个组的最大重量和计数:

db.aggregate([
    {'$group': {'_id': '$kind',
                'max_weight': {'$max': '$weight'},
                'count': {'$sum': 1}}}
])

有没有办法让这个聚合return每组中最重的动物对应的昵称?

使用$sort instead of $max to return a whole document and reference with $first:

db.collection.aggregate([
    { "$sort": { "weight": -1 } },
    { "$group": {
         "_id": "$kind", 
         "max_weight": { "$first": "$weight" },
         "nickname": { "$first": "$nickname" },
         "count": { "$sum": 1 }
    }}
])

确保 "grouping boundary" 上的文档值由您提供给 $first 的参数返回。由于 $sort 是 "weight" 的降序排列。