给定数据集:
{_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] }
}
}
])
答案 0 :(得分:2)
您可以使用以下汇总,$sort
金额递减,然后$first
运算符投放最大金额文档。
$replaceRoot
将最高金额文档提升到最高级别。
collection.aggregate([
{$sort:{'amount':-1}},
{$group:{ _id: '$type',group:{$first:'$$ROOT'}}},
{$replaceRoot:{newRoot:"$group"}}
])