使用MongoDB返回每个组中具有最大值的文档

时间:2018-01-24 11:05:59

标签: mongodb aggregation-framework

给定数据集:

{_id: 0, type: 'banana', amount: 5}
{_id: 1, type: 'banana', amount: 3}
{_id: 2, type: 'apple', amount: 8}
{_id: 3, type: 'apple', amount: 2}

获取具有最高type的同一amount的记录的最有效方法是什么?

预期结果是:

{_id: 0, type: 'banana', amount: 5}
{_id: 2, type: 'apple', amount: 8}

现在我这样做,但看起来有点傻:

collection.aggregate([
  { $sort: { 'amount': -1 } },
  { $group: {
     _id: '$type',
     group: {
       $push: '$$ROOT'
     }
   }, {
     $replaceRoot: {
       newRoot: { $arrayElemAt: ["$group", 0] }
     }
   }
])

1 个答案:

答案 0 :(得分:2)

您可以使用以下汇总,$sort金额递减,然后$first运算符投放最大金额文档。

$replaceRoot将最高金额文档提升到最高级别。

collection.aggregate([
 {$sort:{'amount':-1}}, 
 {$group:{ _id: '$type',group:{$first:'$$ROOT'}}},
 {$replaceRoot:{newRoot:"$group"}}
])