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