Map-reduce是一种数据处理范例,用于将大量数据压缩为有用的聚合结果。对于map-reduce操作,MongoDB提供了mapReduce
database命令。
注意
从4.2版开始,MongoDB弃用:
请考虑以下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中,map-reduce操作使用自定义JavaScript函数将 值映射或关联到键。如果一个键具有映射到它的多个值,则该操作会将键的值减小为单个对象。
自定义JavaScript函数的使用为映射减少操作提供了灵活性。例如,在处理文档时,映射功能可以创建多个键和值映射,也可以不创建任何映射。Map-reduce操作还可以使用自定义JavaScript函数在地图末尾对结果进行最终修改,并进行reduce操作,例如执行其他计算。
在4.2.1版本开始,MongoDB的不赞成使用范围(即使用JavaScript的BSON类型15)的
map
,reduce
和finalize
功能。要限制变量的范围,请改用scope
参数。
在MongoDB中,map-reduce操作可以将结果写入集合或内联返回结果。如果将map-reduce输出写入集合,则可以在同一输入集合上执行随后的map-reduce操作,这些操作将替换,合并或减少新结果与先前结果合并。有关详细信息和示例,请参见mapReduce
并
执行增量映射减少。
当内联返回map-reduce操作的结果时,结果文档必须在限制(当前为16兆字节)内。有关map-reduce操作的限制和约束的其他信息,请参见
mapReduce参考页。BSON Document Size
MongoDB支持对分片集合进行 map-reduce操作。
但是,从4.2版开始,MongoDB弃用map-reduce选项以创建新的分片集合,并将该
sharded
选项用于map-reduce。要输出到分片集合,请首先创建分片集合。MongoDB 4.2还不建议替换现有分片集合。
请参阅Map-Reduce和分片集合。