MongoDB Map-Reduce函数使用

2023-04-14 16:01:32 浏览数 (1)

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集合中。

0 人点赞