注意
聚合管道作为替代方案
从 MongoDB 5.0 开始,已弃用 map-reduce:
对于需要自定义功能的 map-reduce 操作,可以使用
$accumulator和$function聚合操作符。可以使用这些操作符在 JavaScript 中定义自定义聚合表达式。
有关 map-reduce 的聚合管道替代方案的示例,请参阅:
您可在用户界面中为 MongoDB Atlas 中托管的部署运行聚合管道。
map-reduce 是一种数据处理范例,用于将大量数据压缩为聚合结果。要执行map-reduce操作, MongoDB提供了mapReduce 数据库命令。
请考虑以下 map-reduce 操作:
MongoDB将映射阶段应用于每个输入文档(集合中与查询条件匹配的文档)。 map 函数会发出键值对。对于具有多个值的键, MongoDB会应用化简阶段,该阶段会收集并压缩数据,然后将结果存储在集合中。 reduce 函数的输出可以选择通过 finalize 函数来进一步进程结果。
MongoDB中的所有map-reduce函数都是JavaScript ,并在 进程中运行。mongod map-reduce 操作将单个集合作为输入,并且可以在 map 阶段之前应用排序和限制。mapReduce 可以将结果作为文档返回,也可以将其写入集合。
注意
MongoDB Atlas免费版和 Flex 集群不支持 Map-reduce。
Map-Reduce JavaScript 函数
Map-reduce 操作使用自定义JavaScript函数将值映射到键。如果键有多个值,则该操作会将它们减少为单个对象。映射函数可以发出多个键值对,也可以不发出。可选的 finalize 函数可以对结果进行进一步修改。
Map-Reduce 结果
map-reduce操作可以写入结果写入集合,也可以以内联方式返回结果。如果将结果写入集合,则可以对同一输入集合运行后续map-reduce操作,将新结果替换、合并或减少为以前的结果。有关示例,请参阅mapReduce 和执行增量 Map-Reduce。
以内联方式返回结果时,结果文档必须符合 MB 的BSON文档大小限制。有关更多限制和限制,请参阅 16mapReduce。
分片集合
MongoDB 支持分片集合上的 map-reduce 操作。
视图
视图不支持 map-reduce 操作。