Mongodb聚合缺少日期

时间:2019-03-18 08:06:10

标签: javascript node.js mongodb date aggregation-framework

我正在尝试对一堆文档进行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天但不小于完全匹配的日期会出现时间差异。时差是几个小时。我对我要去哪里错感到困惑。

感谢所有帮助。谢谢

0 个答案:

没有答案