Mongo聚集域x与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'字段对它们进行分组,然后返回每组中体重最大的动物的昵称,该组中的最大体重以及该组中的动物数量,从而返回:

{'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"降序排列

相关内容

  • 没有找到相关文章

最新更新