Map-Reduce
注意
聚合管道作为替代方案
从 MongoDB 5.0 开始,已弃用 map-reduce:
您应该使用 聚合管道 ,而不是 map-reduce 。聚合管道提供比 map-reduce 更好的性能和可用性。
对于需要自定义功能的 map-reduce 操作,可以使用
$accumulator
和$function
聚合操作符。可以使用这些操作符在 JavaScript 中定义自定义聚合表达式。
有关 map-reduce 的聚合管道替代方案的示例,请参阅:
您可在用户界面中为 MongoDB Atlas 中托管的部署运行聚合管道。
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 操作将单个集合的文档作为输入,并且可以在开始映射阶段之前执行任意排序和限制。mapReduce
可以将 map-reduce 操作的结果作为文档返回,也可以将结果写入集合。
注意
MongoDB Atlas 免费集群和 MongoDB Atlas 无服务器实例不支持 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 输出到写入集合,则可以对同一输入集合执行后续 map-reduce 操作,将新结果与以前的结果合并替换、合并或减少。有关详细信息和示例,请参见 mapReduce
和执行增量 Map-Reduce。
当以内联方式返回 map-reduce 操作的结果时,结果文档必须在 BSON 文档大小限制内,该限制目前为 16 MB。有关 map-reduce 操作的限制和约束的更多信息,请参阅 mapReduce 参考页面。
分片集合
MongoDB 支持分片集合上的 map-reduce 操作。
视图
视图不支持 map-reduce 操作。