我想对某个指标执行map-reduce操作,并希望存储其聚合结果和时间序列。
存储聚合结果似乎非常简单,但是如何以时间序列方式存储结果,即每当map-reduce函数运行时,该间隔的值也应记录在结果集合中。 (即时间序列数据)
假设我的map-reduce聚合有以下结果: -
> db.result.find()
{ "_id" : { "eventId" : 1}, "value" : { "sum" : 21 } }
{ "_id" : { "eventId" : 2}, "value" : { "sum" : 31 } }
我能够使用map_reduce聚合框架轻松实现上述目标。
我希望结果也存储在时间序列中,如下所示: -
> db.result.find()
{ "_id" : { "eventId" : 1}, "value" : { "sum" : 21, "ts": {1: 15, 2: 4, 3: 2 } } }
{ "_id" : { "eventId" : 2}, "value" : { "sum" : 31, "ts": {1: 12, 2: 12, 3: 7 } } }
现在每当map-reduce函数运行时,它都应该更新结果集合。
我尝试了很多方法,但无法成功。任何想法我怎么能实现它?
另外,如果在同一个map-reduce函数调用下可以实现这一点,那就太棒了。
答案 0 :(得分:0)
此类时间序列数据的一般建议是使用pre-aggregated reports。
如果无法做到这一点,请首先考虑使用aggregation pipeline而不是map-reduce。如果您的用例允许,它会更快更容易。
通过聚合管道和map-reduce,您可以使用结果创建所需的文档。 setOnInsert可能会有所帮助。