Map函数
Map函数用于将集合中的每个文档转换为一个键值对,并将这些键值对作为中间结果传递给Reduce函数。例如:
代码语言:javascript复制function map() {
emit(this.type, this.price);
}
这个Map函数将集合中每个文档的type字段作为键,将price字段作为值,生成一系列键值对。
Reduce函数
Reduce函数用于将Map函数生成的键值对按照键进行分组,并对每个分组的值进行聚合操作,例如求和、平均数等。例如:
代码语言:javascript复制function reduce(key, values) {
var total = 0;
for (var i = 0; i < values.length; i ) {
total = values[i];
}
return total;
}
这个Reduce函数将Map函数生成的键值对按照键进行分组,并对每个分组的值求和。
执行Map-Reduce
执行Map-Reduce函数的方法为:
代码语言:javascript复制db.collection.mapReduce(map, reduce, { out: "result" });
其中map和reduce参数分别为上述定义的Map函数和Reduce函数,out参数指定输出结果的集合名称。
例如,我们可以使用以下命令对orders集合进行Map-Reduce计算:
代码语言:javascript复制db.orders.mapReduce(
function() { emit(this.user_id, this.amount); },
function(key, values) { return Array.sum(values); },
{ out: "total_amount_by_user" }
)
这个命令将orders集合按照user_id字段进行分组,计算每个用户的订单总金额,并将结果输出到total_amount_by_user集合中。