【发布时间】:2015-06-27 18:02:06
【问题描述】:
我什至知道 mapreduce 是否是我需要的最佳选择。我有一个像这样的猫鼬文档:
currency {
Time: Date,
Interval: Number
}
在我的 mapreduce 工作中,我想计算最后 X 个文档的平均价格(间隔)。 (包括当前)。
如果我将 20 传递给我的方法,我希望对于每个文档,计算最后一个 19 + 当前一个的值除以 20。 任何正确方向的建议或指示将不胜感激。这就是我想要完成的:
function calculateAverages(Schema, interval, avg, callback){
v
var o = {};
o.scope = {interval: interval, avg: avg};
o.map = function(){
var value = {
Time: this.Date,
Interval: this.Interval
};
// How am I gonna group the correct number of docs togheter?
var key= ??
emit(key, value);
};
// an array of avg ( ex 20) number of items should be passed here
o.reduce = function(key, intervals){
var reducedVal = { avg: 0};
for(var i=0;i<intervals.length;i++){
reducedVal.avg += intervals[i].Interval;
}
reducedVal.avg /= avg;
return reducedVal;
};
o.out = {
merge: "testing"
};
o.finalize = function(key, reducedVal){
return reducedVal;
};
Schema.mapReduce(o, function (err, results) {
if (err) throw err;
//console.log(results);
console.log("mapReduce complete");
callback(results);
});
};
【问题讨论】:
-
MapReduce 在这种情况下(根本)不是正确的选择。您正在传递随机数,在这种情况下为 20,然后在运行时您需要基于传递的参数的结果,Map reduce 将在这些情况下工作,例如在您的日志文件中,每毫秒打印一些文本,并且您希望每小时发生某个特定世界的总数(这不会像您的情况那样根据某些参数而改变),因此您可以预先计算并在需要时随身携带只需从该文档返回...对于您的用例,只需按照某人的建议选择聚合管道...
标签: javascript node.js mongodb mapreduce mongoose