У меня есть коллекция ProductViews
.
ProductView
{
productId: '5b8c0f3204a10228b00a1745,
createdAt: '2018-09-07T17:18:40.759Z',
}
И у меня есть запрос на выборку ежедневных просмотров для определенного продукта.
Запрос
ProductView.aggregate([
{ $match: { productId } },
{ $project: { day: { $substr: ["$createdAt", 0, 10] } } },
{
$group: {
_id: "$day",
count: { $sum: 1 },
time: { $avg: "$createdAt" },
}
},
{ $sort: { _id: 1 } },
{
$project: {
date: '$_id',
views: '$count',
},
},
]).exec((err, result) => ...)
Текущие результаты
[
{ date: '2018-09-01', views: 1 },
{ date: '2018-09-02', views: 3 },
{ date: '2018-09-04', views: 2 },
{ date: '2018-09-05', views: 5 },
// ...
]
Выпуск
Проблема в том, что эта агрегация не возвращает { date: '2018-09-03', views: 0 }
для дней с 0
просмотрами. Это приводит к некорректному отображению данных:
Результаты должны выглядеть следующим образом:
[
{ date: '2018-09-01', views: 1 },
{ date: '2018-09-02', views: 3 },
{ date: '2018-09-03', views: 0 },
{ date: '2018-09-04', views: 2 },
{ date: '2018-09-05', views: 5 },
// ...
]
P.S .: Было бы идеально передать даты начала и окончания для вывода результатов на основе этого диапазона