求和实现思路
- Map阶段:在Map函数中,对文档进行遍历,提取需要进行求和操作的字段值,并以键值对形式输出,键可以是任意唯一标识(如文档ID),值为需要求和的字段值。
- Reduce阶段:Reduce函数接收Map函数输出的键值对集合,对每个键对应的值进行累加操作,最终得到总和。
求平均值实现思路
- Map阶段:与求和类似,在Map函数中提取需要求平均值的字段值,以键值对形式输出,同时可以额外输出一个计数1,用于统计参与计算的文档数量。
- Reduce阶段:Reduce函数先对每个键对应的值(需要求平均值的字段值)进行累加,同时统计每个键对应的计数总和,最后将累加值除以计数总和得到平均值。
求和示例代码
// Map函数
function (doc) {
if (doc.value) {
emit(doc._id, doc.value);
}
}
// Reduce函数
function (keys, values, rereduce) {
return values.reduce(function (sum, value) {
return sum + value;
}, 0);
}
求平均值示例代码
// Map函数
function (doc) {
if (doc.value) {
emit(doc._id, [doc.value, 1]);
}
}
// Reduce函数
function (keys, values, rereduce) {
var total = 0;
var count = 0;
values.forEach(function (value) {
total += value[0];
count += value[1];
});
return total / count;
}