英文原文地址:https://docs.mongodb.com/v3.2/core/map-reduce/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。
Map-Reduce
Map-reduce是一种把大量数据变成有用的聚集结果的数据处理模式。对于map-reduce操作,MongoDB提供了mapReduce
数据库命令。
考虑以下map-reduce操作:
在该map-reduce操作中,MongoDB对每个输入文档(即集合中匹配查询条件的文档)应用map
阶段。map函数产生键-值对。对于这些有多个值的键,MongoDB应用reduce阶段,收集并精简聚集数据,然后把结果保存在一个集合中。可选地,reduce函数的输出可以通过一个最终的函数,以进一步精简或处理聚集结果。
MongoDB中所有的map-reduce函数都是Javascript函数,运行在mongod
进程中。Map-reduce操作把单个集合的文档作为输入,在map阶段开始前,可以执行任意的排序或者限制操作。mapReduce
可以把map-reduce操作的结果作为文档返回,或者把结果写入到集合中。输入和输出的集合都可以是分片的。
注意:
对于大多数聚集操作,聚集管道提供了更好的性能,更一致的接口。然而,map-reduce操作提供了一些聚集管道所没有的灵活性。
Map-Reduce Javascript函数
在MongoDB中,map-reduce操作使用自定义的Javascript函数来映射值到键,或者关联值到键。如果一个键有多个值映射到它,操作中该键的值会被归约为一个对象。
自定义Javascript函数的使用对map-reduce操作提供了灵活性。例如,当处理一个文档时,map函数可以创建多个键,或者不映射。在Map-reduce的最后阶段,Map-reduce操作也可以使用自定义Javascript函数来对结果做最终的修改,例如执行额外的计算。
Map-Reduce行为
MongoDB中,map-reduce操作可以把结果写入到集合中,或者在线返回结果。如果把结果写入到集合中,你可以对同样的输入集合做后续的map-reduce操作,与之前的结果合并/替换,合并或者归约。详情和例子请查看mapReduce
和增量式Map-Reduce。
在线返回map-reduce操作的结果时,返回的文档必须在**BSON文档大小限制内,目前是16M。关于map-reduce操作的其它限制和约束,查看`mapReduce参考页面。
MongoDB支持在分片集合上执行map-reduce操作。Map-reduce操作也可以把结果输出到分片集合中。参见Map-Reduce与分片集合。