我有一个预聚合指标的数据库,类似于此用例中概述的指标:http: //docs.mongodb.org/manual/use-cases/pre-aggregated-reports/
我有一个每日集合,其中包含小时和分钟指标的子文档,以及它所代表的当天午夜的“metadata.date”条目。我还有一个月度收藏,每天都有一个日子文档。
如果我想获得过去八天左右的指标平均值,我该如何使用聚合框架来做到这一点?聚合框架是否不是正确的工具,因为它已经预先聚合了?
我有一个预聚合指标的数据库,类似于此用例中概述的指标:http: //docs.mongodb.org/manual/use-cases/pre-aggregated-reports/
我有一个每日集合,其中包含小时和分钟指标的子文档,以及它所代表的当天午夜的“metadata.date”条目。我还有一个月度收藏,每天都有一个日子文档。
如果我想获得过去八天左右的指标平均值,我该如何使用聚合框架来做到这一点?聚合框架是否不是正确的工具,因为它已经预先聚合了?
我最终为此使用了 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;
};
其实很简单。