如何在mongo中按层次结构存储MapReduce结果

时间:2014-01-03 16:09:27

标签: mongodb mapreduce

我想对某个指标执行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函数调用下可以实现这一点,那就太棒了。

1 个答案:

答案 0 :(得分:0)

此类时间序列数据的一般建议是使用pre-aggregated reports

如果无法做到这一点,请首先考虑使用aggregation pipeline而不是map-reduce。如果您的用例允许,它会更快更容易。

通过聚合管道和map-reduce,您可以使用结果创建所需的文档。 setOnInsert可能会有所帮助。