Пропущенные даты агрегирования Mongodb - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь запустить агрегат 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 дней, но не меньше, чем те, где они точно совпадают.Разница во времени составляет несколько часов.Я сбит с толку относительно того, где я иду не так.

Ценю всю помощь.БЛАГОДАРЯ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...