Order.aggregate()
.match({ createdAt: dateRange })
.lookup({
as: 'userData',
foreignField: '_id',
from: 'users',
localField: 'user',
})
.unwind('$userData')
.lookup({
as: 'referrals',
foreignField: 'referredBy',
from: 'users',
localField: 'user',
})
.unwind('$referrals')
.project({
_id: 0,
companyName: '$userData.companyName',
fullName: '$userData.fullName',
invoiceNumber: 1,
orderNumber: 1,
price: 1,
referrals: '$referrals._id',
user: 1,
})
.group({
_id: '$user',
companyName: { $first: '$companyName' },
fullName: { $first: '$fullName' },
invoiceNumber: { $first: '$orderNumber' },
referrals: { $addToSet: '$referrals' },
total: { $sum: '$price' },
})
.match({
$or: '$referrals'.map(user => ({ user })),
createdAt: dateRange,
});
Все, что мне нужно, это l oop через массив $ referrals. Но появляется сообщение об ошибке:
"$ referrals" .map не является функцией
Есть ли обходной путь для этого?
Также я я новичок в MongoDB, это лучший способ получения данных? Данные, которые я хочу:
Предполагая, что пользователь mr.foo :
найти все заказы в диапазоне дат, подсчитать сумму, сделать номер первого заказа номер счета,
получить mr.foo данные из коллекции пользователей,
найти всех пользователей кто mr.foo реферал - (у кого есть mr.foo id в поле referredBy
)
найти все заказы рефералов, и посчитайте общий счет рефералов
рассчитайте комиссию mr.foo от общего счета их рефералов.
OUTPUT.