MongoDB之MapReduce

本文介绍了 MongoDB 中 MapReduce 的基本原理与应用方法,包括 map 和 reduce 函数的设计,以及如何通过 mapReduce 命令执行统计任务。此外还探讨了如何使用 finalize 函数对结果进行进一步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 MongoDB  MapReduce 相当于 Mysql 中的"group by", 所以在 MongoDB 上使用 Map/Reduce 进行并行"统计"很容易。

    使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection中所有记录, key  value 传递给 Reduce 函数进行处理。 函数和 Reduce  Map 函数可以使用 JavaScript 来实现,可以通db.runCommand  mapReduce 命令来执行一个 MapReduce 的操作。

MongoDB之MapReduce - sheperd - 牧羊人的博客
MongoDB之MapReduce - sheperd - 牧羊人的博客 

参数说明

mapreduce: 要操作的目标集合。

map: 映射函数 (生成键值对序列,作为 reduce 函数参数)

reduce: 统计函数。

query: 目标记录过滤。

sort: 目标记录排序。

limit: 限制目标记录数量。

out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)

keeptemp: 是否保留临时集合。

finalize: 最终处理函数 ( reduce 返回结果进行最终整理后存入结果集合)

scope:  mapreducefinalize 导入外部变量。

verbose: 显示详细的时间统计信息。

 

8.1 Map

Map 函数必须调用 emit(key, value) 返回键值对,使用 this 访问当前待处理的 Document

m = function() { emit(this.classid, 1) }

value 可以使用 JSON Object 传递 (支持多个属性值)。例如:

emit(this.classid, {count:1}) 

 

8.2 Reduce

     Reduce 函数接收的参数类似 Group 效果, Map 返回的键值序列组合成 { key, [value1, value2, value3, value...] } 传递给 reduce

r = function(key, values) {

var x = 0;

values.forEach(function(v) { x += v });

return x;

}

8.3 Result

res = db.runCommand({

mapreduce:"students",

map:m,

reduce:r,

out:"students_res"

});

mapReduce() 将结果存储在 "students_res" 表中。

8.4 Finalize

利用 finalize() 我们可以对 reduce() 的结果做进一步处理。

f = function(key, value) { return {classid:key, count:value}; }

列名变与 “classid”和”count”,这样的列表更容易理解。

8.5 Options

可以添加更多的控制细节 。添加querysort等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值