Я сгруппировал некоторые данные по некоторым условиям и получил ожидаемый результат. Тем не менее, я хотел бы только вернуть товар с наибольшим числом в каждом pool
. Если бы я только хотел получить самый высокий, я бы мог добавить .sort({ correctBets: -1 }).limit(1)
в конец, но теперь мне нужен один в каждом пуле. И если два или более correctBets одинаковы в одном пуле, я хотел бы вернуть все эти элементы. Как мне это сделать?
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 }
]
Редактировать: предложенный повторяющийся вопрос не обрабатывает максимальные значения для каждого «ключа», так как в моем случае это два пула. Фу и бар.