- MapReduce的介绍: 是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)";使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。
- MapReduce的语法规则:
db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values) {return reduceFunction}, //reduce 函数 { out: collection, //输出到某个集合表 query: document, //查询过滤 sort: document, //排序 limit: number } )
- 代码实例
db.TotalUserAverageDailyLengthRound_temp.mapReduce( function(){ emit({'day_time':this.day_time,'discount':this.discount,mac:this.mac,sn:this.sn},{countUser:1}); }, function(keys,values){ var total =0; for ( var i=0; i<values.length; i++ ) total += values[i].countUser; return {'countUser':values.length,'total':total}; }, 'mytest' );
- mapReduce的javascript函数方法体介绍:
mapReduce参数方法说明 名称 类型 说明 map MongoDB\BSON\Javascript 映射函数 (生成键值对序列,作为 reduce 函数参数)。
reduce MongoDB\BSON\Javascript 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。 out string\document 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。 options array Optional. 指定所需选项的数组。 options数组参数说明 名称 类型 说明 bypassDocumentValidation boolean Optional. If
true
, allows the write operation to circumvent document level validation. Defaults tofalse
.This option is available in MongoDB 3.2+ and is ignored for older server versions, which do not support document level validation.
This only applies when results are output to a collection.
可选的。如果为true,则允许写入操作绕过文档级验证。默认为false。
此选项在MongoDB 3.2+中可用,对于不支持文档级验证的旧服务器版本,将忽略此选项。
这仅在结果输出到集合时适用。
collation array|object 可选的。排序规则允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音标记的规则。指定排序规则时,区域设置字段是必需的;所有其他排序规则字段都是可选的。有关字段的说明,请参阅排序规则文档。
此选项在MongoDB 3.4+中可用,如果为较旧的服务器版本指定,则在执行时将导致异常。
如果未指定排序规则,但集合具有默认排序规则,则该操作将使用为集合指定的排序规则。如果没有为集合或操作指定排序规则,MongoDB将使用以前版本中使用的简单二进制比较进行字符串比较。
finalize MongoDB\BSON\Javascript 可选的。遵循reduce方法并修改输出。 jsMode boolean 可选。指定是否在执行map和reduce函数之间将中间数据转换为bson格式。默认值为false。
如果为false,在内部,mongodb将map函数发出的javascript对象转换为bson对象。当调用reduce函数时,这些bson对象被转换回javascript对象。map reduce操作将中间bson对象放置在临时磁盘存储中。这允许map reduce操作在任意大的数据集上执行。
如果为true,在内部,在map函数期间发出的javascript对象保持为javascript对象。不需要为reduce函数转换对象,这样可以加快执行速度。对于映射器的emit()函数具有少于500000个不同键参数的结果集,只能使用jsmode。
limit integer Optional. Specifies a maximum number of documents for the input into the map function.
可选的。指定一个map函数输入最大数
maxTimeMS integer query document 可选的。使用查询运算符指定选择条件,以确定输入到映射函数的文档
readConcern MongoDB\Driver\ReadConcern readPreference MongoDB\Driver\ReadPreference scope document 可选的。指定可在map、reduce和finalize函数中访问的全局变量。 session MongoDB\Driver\Session sort array|object 可选的。对输入的文件进行排序,此选项对于优化很有用。例如,将排序键指定为与emit键相同,以便减少reduce操作。排序键必须在此集合的现有索引中。 typeMap array verbose boolean 可选的。指定是否在结果信息中包含计时信息。verbose默认为true,以包含计时信息。 writeConcern MongoDB\Driver\WriteConcern 可选的。表示输出到集合时要使用的写关注点的文档。忽略使用默认的写关注点。