Mongodb 返回分组数据中的最大值
我根据一些条件对一些数据进行了分组,得到了预期的结果。但是,我只想返回每个Mongodb 返回分组数据中的最大值,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我根据一些条件对一些数据进行了分组,得到了预期的结果。但是,我只想返回每个池中编号最高的项目。如果我只想得到最高的一个,我可以添加.sort({correctBets:-1})。将(1)限制到最后,但现在每个池中都需要一个。如果一个池中有两个或更多的正确赌注是相同的,我想退还所有这些物品。我该怎么做 const coupon = await CouponModel.aggregate([ { $match: { eventId: { $in: eventIds
池中编号最高的项目。如果我只想得到最高的一个,我可以添加.sort({correctBets:-1})。将(1)
限制到最后,但现在每个池中都需要一个。如果一个池中有两个或更多的正确赌注是相同的,我想退还所有这些物品。我该怎么做
const coupon = await CouponModel.aggregate([
{
$match: {
eventId: { $in: eventIds },
},
},
{
$group: {
_id: {
userId: '$userId',
pool: '$pool',
},
correctBets: {
$sum: '$correctBets',
},
},
},
])
这是我从聚合返回的数据
[
{ _id: { userId: '5df344a1372f345308dac12a', pool: 'foo' },
correctBets: 9 },
{ _id: { userId: '5dfb2db245011a390fec4f7d', pool: 'bar' },
correctBets: 6 },
{ _id: { userId: '5df344a1372f345308dac12a', pool: 'bar' },
correctBets: 5 },
{ _id: { userId: '5dfb2db245011a390fec4f7d', pool: 'foo' },
correctBets: 11 }
]
我的预期结果应该是这样的
[
{ _id: { userId: '5dfb2db245011a390fec4f7d', pool: 'foo' },
correctBets: 11 },
{ _id: { userId: '5dfb2db245011a390fec4f7d', pool: 'bar' },
correctBets: 6 }
]
编辑:建议的重复问题不处理每个“键”的最大值,因为在我的例子中是两个池。Foo和bar.您需要添加额外的阶段。我们需要为每个池
字段计算maxcorrectBets
,并将文档存储到时态数据
字段中。然后,我们展平数据
,并检查数据中存储的任何文档是否具有相同的最大值更正
{
$group: {
_id: {
pool: "$_id.pool"
},
data: {
$push: "$$ROOT"
},
correctBets: {
$max: "$correctBets"
}
}
},
{
$unwind: "$data"
},
{
$match: {
$expr: {
$eq: [
"$correctBets",
"$data.correctBets"
]
}
}
},
{
$replaceRoot: {
newRoot: "$data"
}
}
这是否回答了您的问题?不幸的是,它只返回一个池中的最高值。我需要最高的摊位。下面的答案确实有效。无论如何谢谢你!谢谢但是,如果同一池中的两个用户ID具有相同数量的correctBets,则结果仅包括其中一个。如果他们两人都打成平局,我想让他们一起去。@GameAtrix请再检查一遍。现在他们都在操场上了吗?是的,现在它按预期工作了。非常感谢你!