dan*_*ane 3 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}
Run Code Online (Sandbox Code Playgroud)
type只获取具有最高值的相同记录的最有效方法是什么amount?
预期结果是:
{_id: 0, type: 'banana', amount: 5}
{_id: 2, type: 'apple', amount: 8}
Run Code Online (Sandbox Code Playgroud)
现在我正在这样做,但看起来有点愚蠢:
collection.aggregate([
{ $sort: { 'amount': -1 } },
{ $group: {
_id: '$type',
group: {
$push: '$$ROOT'
}
}, {
$replaceRoot: {
newRoot: { $arrayElemAt: ["$group", 0] }
}
}
])
Run Code Online (Sandbox Code Playgroud)
您可以使用以下聚合,$sort金额递减,后跟$first运算符来投影最大金额文档。
$replaceRoot将最大金额文档提升至顶级。
collection.aggregate([
{$sort:{'amount':-1}},
{$group:{ _id: '$type',group:{$first:'$$ROOT'}}},
{$replaceRoot:{newRoot:"$group"}}
])
Run Code Online (Sandbox Code Playgroud)