获取mongodb中预先汇总报告的平均值

时间:2012-12-10 23:02:46

标签: mongodb

我有一个预先汇总的指标数据库,类似于此用例中列出的指标:http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/

我有一个每日收集,其中包含小时和分钟指标的子文档,以及它所代表的当天午夜的'metadata.date'条目。我还有每月收集一天的子文档。

如果我想在过去八天左右获得平均指标,我该如何使用聚合框架?聚合框架不是正确的工具,因为它已经预先聚合了吗?

1 个答案:

答案 0 :(得分:0)

我最终使用map / reduce:

图:

var map = function(){
          for(x in this.hour){
              var key = this.metadata.port_name;
              var value = {
                  count: 1,
                  value: this.hour[x]
              }
              emit(key, value);
          }
        };

减少

var reduce = function(key, value){
          reducedValue = { count: 0, value: 0 };
          for(var i = 0; i < value.length; i++){
              reducedValue.count += value[i].count;
              reducedValue.value += value[i].value;
          }

          return reducedValue;
        };

最终化:

var finalize = function(key, reducedValue){
        reducedValue.average = reducedValue.value/reducedValue.count;

        return reducedValue;
      };

实际上很简单。