2012-12-10 54 views
0

從預彙總報表平均值我有類似的人在這個用例概述預彙總指標數據庫:http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/獲取MongoDB中

我每天收集與小時和分鐘子文檔度量標準以及它所代表的當天午夜的「metadata.date」條目。我還有一個每月收集每天一天的子文檔。

如果我想在過去八天左右的時間裏獲得平均值,我怎麼用聚合框架來做到這一點?由於聚合框架已經預先聚合,因此聚合框架不是正確的工具嗎?

回答

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

漂亮其實很簡單。