我正在进行时间序列应用程序(每个文档都有时间戳和值),需要通过分组到时间段(间隔)来聚合值。为了制作时隙,时间戳被分割然后被覆盖。例如1分钟的插槽:
db.collection.aggregate([
{$project: {value:1, "timestamp": {$subtract: ["$time", new Date('1970-01-01')]}} },
{$project: {value:1, "time2": {$divide, ["$timestamp",60000]}}},
{$project: {value:1, "timeslot": {$floor: "$time2"}}},
{$group: {_id: "$timeslot", avg: {$avg, "$value"}}}
])
这完成了这项工作,但非常笨拙:3 $项目顺序,值:每次重复1次。有没有办法结合$ subtract,$ divide,$ floor ......?
此外,com.mongodb.client.model.Projections中是否有方便的方法来做到这一点?我使用的是Java mongodb-driver 3.6.2。