Мой запрос агрегации mongodb должен возвращать ежедневные, еженедельные, ежемесячные и годовые данные в определенных диапазонах дат.
Пример: предположим, даты между 1 февраля и 1 марта.
данные за сутки должны быть: 1-го, 2-го, 3-го ..
Недельный период будет: 1 февраля, 8 февраля, 15 февраля, 22 февраля.
месячный период будет 1 февраля, 1 марта.
Посмотрите на пример ниже:
Допустим, мой API принимает: startDate, endDate, interval в качестве параметров тела.
req.body будет примерно таким:
{
startDate: "",
endDate: "",
platform: "",
interval: "daily" // could be "weekly", "monthly", "yearly"
}
Эти параметры будут переданы моей модели, где у меня есть некоторый код агрегации, который будет упомянут ниже:
MessagesSchema.statics.totalMessages = ( startDate, endDate, platform, interval ) => {
return Messages.aggregate([{
$match: {
platform: platform,
timestamp: {
$gte: new Date(startDate),
$lte: new Date(endDate)
}
}
},
{
$project: {
timestamp: {
$dateToString: {
format: '%Y-%m-%d',
date: '$timestamp'
}
}
}
},
{
$group: {
_id: {
timestamp: '$timestamp'
},
count: {
$sum: 1
}
}
},
{
$sort: {
'_id.timestamp': 1
}
}
]).exec();
Предположим, еженедельные данные с 1 февраля 2019 года по 1 марта 2019 года;
ожидаемый результат:
[
{
"_id": {
"timestamp": "2019-02-01"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-02-08"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-02-15"
},
"count": 2
}
]
фактический результат:
[
{
"_id": {
"timestamp": "2019-02-01"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-03-02"
},
"count": 2
},
{
"_id": {
"timestamp": "2019-03-02"
},
"count": 2
}
]