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