У меня есть канал агрегации MondoDB, который выводит ежедневную сумму дохода путем агрегирования всех Sales
:
Sale.aggregate
([
{
$project: {
day: { $substr: ['$createdAt', 0, 10], },
},
},
{
$group: {
_id: '$day',
earnings: { $sum: '$pricing.earnings' },
},
},
{
$sort: {
_id: 1
}
},
{
$project: {
date: '$_id',
earnings: '$earnings',
},
},
{
$group: {
_id: null,
stats: { $push: '$$ROOT' },
}
},
{
$project: {
stats: {
$map: {
// returns an array with all dates between 2 provided params
input: dates.daysArray(dates.getDay(user.createdAt), dates.today()),
as: 'date',
in: {
$let: {
vars: { index: { $indexOfArray: ['$stats._id', '$$date'] } },
in: {
$cond: {
if: { $ne: ['$$index', -1] },
then: { $arrayElemAt: ['$stats', '$$index'] },
else: { _id: '$$date', date: '$$date', earnings: 0 }
}
}
}
}
}
}
}
},
{
$unwind: '$stats'
},
{
$replaceRoot: {
newRoot: '$stats'
}
},
{
$project: {
_id: 0,
x: '$date',
y: '$earnings',
},
},
])
Вывод этой трубы может выглядеть следующим образом:
[
{
x: '2019-01-09',
y: 10,
},
{
x: '2019-01-10',
y: 5,
},
{
x: '2019-01-11',
y: 20,
}
]
Это означает, что на 2019-01-09
были продажи на сумму $ 10, на 2019-01-10
$ 5 и т. Д.
Теперь я не хочу ежедневный заработок, но сумму всех заработанных доходов.
Это означает, что результат должен выглядеть следующим образом:
[
{
x: '2019-01-09',
y: 10, // a total of $10 on the first day
},
{
x: '2019-01-10',
y: 15, // a total of $15 on the second day (10 + 5)
},
{
x: '2019-01-11',
y: 35, // a total of $35 on the third day (15 + 20)
}
]
Так что в основном я не хочу ежедневную сумму, а рост.
P.S .: Я использую эти данные для отображения на графике.