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,
});
我只想遍历$ referrals数组。但收到错误消息:
“ $ referrals” .map不是一个函数
是否有任何解决方法?
而且,我是MongoDB的初学者,这是获取数据的最佳方法吗?我想要的数据:
假设用户是mr.foo:
查找日期范围内的所有订单,计算总数,将第一个订单号作为发票号,
从Users集合中获取mr.foo数据,
找到所有mr.foo推荐用户-(在referredBy
字段中具有mr.foo id的用户)
查找所有推荐订单,并计算推荐总费用
从推荐人的总账单中计算mr.foo的佣金。
输出。
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: { user: '$referrals._id' }, // changing this to object worked!
user: 1,
})
.group({
_id: '$user',
companyName: { $first: '$companyName' },
fullName: { $first: '$fullName' },
invoiceNumber: { $first: '$orderNumber' },
referrals: { $addToSet: '$referrals' },
total: { $sum: '$price' },
})
.match({
$or: '$referrals',
createdAt: dateRange,
});
我仍在寻找实现此目的的最佳方法。