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