Я пытаюсь запустить агрегат mongodb для группы документов, где я пытаюсь сгруппировать их по миллисекундам.Мне нужны эти данные для построения графика с указанием временного интервала и собранных денег.Причина, по которой я использую миллисекунды, заключается в том, что я хочу сгруппировать документы на основе динамического интервала времени.
// dateTime is a number (milliseconds) that represents the interval
// to group the days within
// for example one day is 86400000. Divided by 6 points
// is 86400000 / 6 ie ~ roughly every 4 hours
"$group": {
"_id": {
"$toDate": {
"$subtract": [{
"$toLong": "$createdAt"
}, {
"$mod": [ { "$toLong": "$createdAt" }, dateTime ]
}]
}
},
"total": { "$sum": "$amount" }
}
Я столкнулся с проблемой. Когда запускается агрегатная функция, она предоставляет только значение длядокументы это соответствует.Это означает, что, если моя диаграмма отображает 10 точек - я получаю только 2 или 3 значения для моих данных.Я пытаюсь решить эту проблему, отображая отсутствующие даты в логике приложения - но по какой-то причине даты, выведенные mongodb, не соответствуют датам, которые я сгенерировал.Несмотря на то, что интервал был одинаковым для mongodb и моего приложения.
// start date is a string generated on the server
// with timezone offset = 0
const generatedData = [];
let startingPoint = new Date(startDate);
for (let point = 0; point < points; point++) {
let currentDate = startingPoint.setTime(startingPoint.getTime() + interval);
generatedData.push(new Date(currentDate));
}
Я также сопоставляю документы по дате начала и окончания.Разница во времени возникает для дат> 3 дней, но не меньше, чем те, где они точно совпадают.Разница во времени составляет несколько часов.Я сбит с толку относительно того, где я иду не так.
Ценю всю помощь.БЛАГОДАРЯ