我有一个数据库,每分钟存储一次温度快照。我有一个API端点,用于填充每小时历史温度条形图。目前,我创建了一个24小时的小时数组作为UNIX时间戳,逻辑然后如下所示:
db.Temperature.aggregate('value', 'AVG', {
where: {
createdAt: {
$lt: start,// new Date(UnixStartTime + 3600000) end of the hour for a given start point
$gt: end// new Date(UnixStartTime)
},
},
});
这个问题当然是如果我在11:30进行查询,那么11点读数实际上是10:30 to 11:30
的所有内容,它应该是11:00 to 11:30
和之前的值应该是10:00 to 11:00
。
如何修复此逻辑,使得返回的值实际上来自正确的小时数?
答案 0 :(得分:0)
我认为你应该将$ aggregate包装成一个cron作业。这就是重复任务的完成方式,完全取决于您希望完成的任务。每天每小时都有一个cron作业查询。
两个NPM模块都非常出色:
使用它们相当容易。只需按照他们使用的日期和时间结构,将您的函数包装到cron作业中。
这将是cron
中的结构var CronJob = require('cron').CronJob;
var job = new CronJob('00 00 00 * * *', function() {
\\do your stuff here
}
配备Timezones并立即启动cron的能力。