参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.mapReduce()
db.collection.
mapReduce
(map,reduce,{<out>,<query>,<sort>,<limit>,<finalize>,<scope>,<jsMode>,<verbose>} )¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
注意
从4.2版开始,MongoDB弃用:
该db.collection.mapReduce()
方法为mapReduce
命令提供了包装。
注意
视图不支持map-reduce操作。
db.collection.mapReduce()
具有以下语法:
db.collection.mapReduce()
采用以下参数:
参数 | 类型 | 描述 |
---|---|---|
map |
功能 | 一个将a 有关更多信息,请参见地图功能的要求。 |
reduce |
功能 | 一种JavaScript函数,可将“减少”到 有关更多信息,请参见reduce函数的要求。 |
options |
文献 | 指定的其他参数的文档
db.collection.mapReduce() 。 |
下表描述了db.collection.mapReduce()
可以接受的其他参数
。
领域 | 类型 | 描述 |
---|---|---|
out |
字符串或文件 | 指定映射归约运算结果的位置。您可以输出到集合,使用操作输出到集合或内联输出。在集合的主要成员上执行map-reduce操作时,您可以输出到集合。在二级成员上,您只能使用 请参阅选项以获取更多信息。 |
query |
文献 | 使用查询运算符指定选择标准,以确定输入到map 功能的文档
。 |
sort |
文献 | 对输入文档进行排序。此选项对于优化很有用。例如,将排序键指定为与发射键相同,以便减少还原操作。排序键必须在此集合的现有索引中。 |
limit |
数 | 指定用于输入map 功能的最大文档数
。 |
finalize |
功能 | 可选的。遵循该 有关更多信息,请参见终结函数的要求。 |
scope |
文献 | 指定的全局变量是在访问map ,
reduce 和finalize 功能。 |
jsMode |
布尔值 | 指定在 默认为 如果
如果
|
verbose |
布尔值 | 指定是否 默认为 |
collation |
文献 | 可选的。 指定 用于操作的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 排序规则选项具有以下语法: 指定排序规则时,该 如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料 如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 3.4版的新功能。 |
bypassDocumentValidation |
布尔值 | 可选的。允许 3.2版中的新功能。 |
注意
map-reduce operations
并且$where
运算符表达式无法访问外壳程序db
中可用的
某些全局函数或属性,例如mongo
。
以下JavaScript函数和属性可用于
和
运算符表达式:map-reduce operations
$where
可用属性 | 可用功能 | |
---|---|---|
args MaxKey MinKey |
assert() BinData() DBPointer() DBRef() doassert() emit() gc() HexData() hex_md5() isNumber() isObject() ISODate() isString() |
Map() MD5() NumberInt() NumberLong() ObjectId() print() printjson() printjsononeline() sleep() Timestamp() tojson() tojsononeline() tojsonObject() UUID() version() |
map
功能¶该map
函数负责将每个输入文档转换为零个或多个文档。它可以访问参数中定义的变量scope
,并具有以下原型:
该map
功能具有以下要求:
map
函数中,请在函数中引用当前文档this
。map
功能应该不以任何理由访问数据库。map
功能应该是纯净的,或者对功能没有任何影响(即副作用)。map
函数可以任选地调用emit(key,value)
任意次数以创建输出文件相关联的key
用value
。map
。要限制变量的范围,请改用scope
参数。以下map
函数将调用emit(key,value)
0或1次,具体取决于输入文档status
字段的值
:
根据输入文档字段中元素的数量,以下map
函数可能会emit(key,value)
多次调用items
:
reduce
功能¶该reduce
函数具有以下原型:
该reduce
函数具有以下行为:
reduce
功能应该不访问数据库,甚至执行读操作。reduce
功能应该不会影响到系统外部。reduce
为只有单个值的键调用该函数。所述values
参数是一个数组,其元素是value
被“映射”到的对象
key
。reduce
为同一键多次调用该函数。在这种情况下,该reduce
键的功能先前的输出将成为该键的下一个reduce
功能调用的输入值之一
。reduce
函数可以访问参数中定义的变量scope
。reduce
不得大于MongoDB的最大BSON文档大小的一半
。当返回大文档然后在后续reduce
步骤中将其合并在一起时,可能会违反此要求。reduce
。要限制变量的范围,请改用scope
参数。因为可以reduce
为同一键多次调用该函数,所以以下属性必须为true:
返回对象的类型必须与value
该map
函数发出
的类型相同。
该reduce
功能必须是关联的。以下陈述必须为真:
该reduce
功能必须是幂等的。确保以下语句为真:
该reduce
函数应该是可交换的:也就是说,中元素的顺序valuesArray
不应影响该reduce
函数的输出
,因此以下语句为真:
out
选项¶您可以为out
参数指定以下选项:
此选项输出到新集合,在副本集的辅助成员上不可用。
注意
从4.2版开始,MongoDB弃用:
仅当将已经存在的集合传递给时,此选项才可用out
。在副本集的辅助成员上不可用。
当您通过操作输出到集合时,out
具有以下参数:
<action>
:指定以下操作之一:
replace
<collectionName>
如果<collectionName>
存在集合,则替换的内容。
merge
如果输出集合已经存在,则将新结果与现有结果合并。如果现有文档的密钥与新结果相同,则覆盖该现有文档。
reduce
如果输出集合已经存在,则将新结果与现有结果合并。如果现有文档的密钥与新结果的密钥相同,则将该reduce
功能应用于新文档和现有文档,并用结果覆盖现有文档。
db
:
可选的。您希望map-reduce操作写入其输出的数据库的名称。默认情况下,该数据库将与输入集合相同。
sharded
:
注意
从4.2版开始,不建议使用该sharded
选项。
可选的。如果true
并且您已在输出数据库上启用分片,则map-reduce操作将使用_id
字段作为分片键对输出集合进行分片。
如果true
和collectionName
是现有的未分片集合,则map-reduce失败。
nonAtomic
:
注意
从MongoDB 4.2开始,不建议显式设置nonAtomic
为false
。
可选的。将输出操作指定为非原子操作。这适用只
对merge
和reduce
输出模式,这可能需要几分钟来执行。
默认情况下nonAtomic
为false
,并且map-reduce操作在后处理期间锁定数据库。
如果nonAtomic
为true
,则后处理步骤将阻止MongoDB锁定数据库:在这段时间内,其他客户端将能够读取输出集合的中间状态。
finalize
功能¶该finalize
函数具有以下原型:
的finalize
函数接收作为其自变量的key
值和reducedValue
从所述reduce
功能。意识到:
finalize
功能应该不以任何理由访问数据库。finalize
功能应该是纯净的,或者对功能没有任何影响(即副作用)。finalize
函数可以访问参数中定义的变量scope
。finalize
。要限制变量的范围,请改用scope
参数。聚合管道作为替代
聚合流水线 比map-reduce提供更好的性能和更一致的接口。
各种地图-减少表达式可以使用被重写聚合管道运营商,诸如$group
,
$merge
等
下面的示例包括聚合管道备选方案。
orders
使用以下文档创建样本集合:
对orders
集合执行map-reduce操作,以对进行分组cust_id
,并计算price
每个的
的总和cust_id
:
定义地图功能来处理每个输入文档:
this
指的是map-reduce操作正在处理的文档。price
到cust_id
每个文档的,并发出cust_id
和price
对。