【问题标题】:Get averages from pre-aggregated reports in mongodb从 mongodb 中的预聚合报告中获取平均值
【发布时间】:2013-01-30 03:31:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我最终为此使用了 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;
          };
    

    其实很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2017-09-09
      相关资源
      最近更新 更多