0

我有一个预聚合指标的数据库,类似于此用例中概述的指标:http: //docs.mongodb.org/manual/use-cases/pre-aggregated-reports/

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

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

4

1 回答 1

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;
      };

其实很简单。

于 2013-01-29T19:31:39.397 回答