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" 的降序排列。
我有一个文档集,例如:
{_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" 的降序排列。