我想要逐步聚合的数据存在问题。MongoDB映射/通过自适应查询递增递减
我设备(很多,存储设备集合中)发出的措施(不定期),其存储在记录收集在数据库中。 每条记录都有一个timestamp_utc,它不是存储数据的时间戳,而是测量的地方。 (完全不同,因为设备发送一堆措施)
我想要的是批量数据聚合(地图减少)以不同的比例为每个不同的设备递增。 例如,我想要一个平均每5分钟测量一次,每30分钟一次,...每天等的集合... 我不想每次处理整个数据,但只有新条目。
例:记录集合包含:
{ _id : {device1, time : ISODate(2011-10-12T13:50:01Z)}, value : { meas1 : 2, meas2 : 4}},
{ _id : {device1, time : ISODate(2011-10-12T13:51:01Z)}, value : { meas1 : 1, meas2 : 6}},
{ _id : {device2, time : ISODate(2011-10-12T13:49:01Z)}, value : { meas1 : 3, meas2 : 7}},
{ _id : {device2, time : ISODate(2011-10-12T13:50:01Z)}, value : { meas1 : 4, meas2 : 8}},
{ _id : {device2, time : ISODate(2011-10-12T13:51:01Z)}, value : { meas1 : 5, meas2 : 9}},
在量程1数据汇总(每5分钟)后,我会像
{ _id : {device1, time : ISODate(2011-10-12T13:50:00Z)}, value : { meas1 : 1.5, meas2 : 5}},
{ _id : {device2, time : ISODate(2011-10-12T13:45:00Z)}, value : { meas1 : 3, meas2 : 7}},
{ _id : {device2, time : ISODate(2011-10-12T13:50:00Z)}, value : { meas1 : 4.5, meas2 : 8.5}},
等每销售。 第一次生成这些数据当然不是什么大事,而且这是一种非常平常的映射/缩减操作。
db.record.mapReduce(map, reduce, {finalize : finalize, out : { merge : db.recordscale1 }});
问题出现在我想要做增量式地图缩减时。事实上,我想这样做STHG这样
db.record.mapReduce(map, reduce, {query : { "_id.time_utc" : { $gte : timeMin } }, finalize : finalize, out : { merge : db.recordscale1 }});
的问题是,时间min为每个设备不同,它应该对应插入输出集合中的最后一项(通过time_utc排序)。
我已经尝试了很多技巧(使用插入时间...)。
有没有人知道我该如何处理它?
我想避免对每个设备进行一次mapreduce,因为它会太低。