Map-Reduce
注意
聚合管道作为替代方案
从 MongoDB 5.0 开始,map-reduce 已弃用
代替 map-reduce,您应使用聚合管道。聚合管道比 map-reduce 提供更好的性能和可用性。
对于需要自定义功能的map-reduce操作,您可以使用
$accumulator
和$function
聚合操作符。您可以使用这些操作符在JavaScript中定义自定义的聚合表达式。
有关聚合管道替代map-reduce的示例,请参阅
Map-reduce是一种数据处理范式,用于将大量数据压缩成有用的聚合结果。要执行map-reduce操作,MongoDB提供了mapReduce
数据库命令。
考虑以下map-reduce操作
在这个map-reduce操作中,MongoDB将对每个输入文档(即匹配查询条件的集合中的文档)应用map阶段。map函数会发出键值对。对于具有多个值的键,MongoDB将应用reduce阶段,该阶段收集并压缩聚合数据。然后MongoDB将结果存储在集合中。可选的,reduce函数的输出可以通过一个finalize函数进一步压缩或处理聚合结果。
MongoDB中的所有map-reduce函数都是JavaScript,并在mongod
进程中运行。Map-reduce操作以单个集合的文档作为输入,可以在开始map阶段之前执行任何任意的排序和限制。 mapReduce
可以将map-reduce操作的结果作为文档返回,或者将结果写入集合。
注意
Map-reduce不支持MongoDB Atlas免费集群和MongoDB Atlas无服务器实例。
Map-Reduce JavaScript函数
在MongoDB中,map-reduce操作使用自定义JavaScript函数来映射,或将值关联到键。如果一个键映射了多个值,操作将归约该键的值到单个对象。
自定义JavaScript函数的使用为map-reduce操作提供了灵活性。例如,在处理文档时,map函数可以创建多个键和值的映射,或者没有映射。map-reduce操作还可以使用自定义JavaScript函数在map和reduce操作结束时对结果进行最终修改,例如执行额外的计算。
Map-Reduce结果
在MongoDB中,map-reduce操作可以将结果写入集合或直接返回。如果您将map-reduce输出写入集合,您可以在同一输入集合上执行后续的map-reduce操作,合并替换、合并或归约新结果与之前的结果。有关详细信息和方法示例,请参阅mapReduce
和执行增量map-reduce。
当以内联方式返回map-reduce操作的结果时,结果文档必须在BSON文档大小限制内,目前为16兆字节。有关map-reduce操作的限制和限制的更多信息,请参阅mapReduce参考页面。
分片集合
MongoDB 支持在 分片集合 上执行 map-reduce 操作。
视图
视图 不支持 map-reduce 操作。