MapReduce是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题。
MapReduce的功能有点类似于mysql中的group by 。
MapReduce中主要有两个函数map和reduce进行统计,map为reduce提供输入,输入的是key-value集合。
下面我们在数据库中插入如下数据:
nodejs中的代码如图:
得到的结果如下图:
从结果中可以看出对性别为man的,年龄不同的分别进行了统计。
参数说明:
mapreduce:要操作的目标集合。
map: 生成键值对序列,作为 reduce函数参数。
reduce:统计函数。
query: 一个筛选条件,只有满足条件的行才会加入mapreduce集合,而这个筛选过程是先于整个mapreduce流程而执行的。
sort: 和query结合的sort排序参数(需要排序的参数必须先建立索引
limit:限制目标记录数量。
out: 结果输出的collection的名字 (不指定则使用临时集合,在客户端断开后自动删除。replace、merge、reduce、inline)。参考:http://www.mongodb.org/display/DOCS/MapReduce
keeptemp: true或false,表明结果输出到的collection是否是临时的,如果为true,则会在客户端连接中断后自动删除,如果你用的是MongoDB的mongo客户端连接,那必须exit后才会删除。如果是脚本执行,脚本退出或调用close会自动删除结果collection。
finalize: 和map,reduce一样是一个函数,它可以在reduce得出一个结果后再对key和value进行一次计算并返回一个最终结果。
scope: 设置参数值,在这里设置的值在map,reduce,finalize函数中可见。
verbose:在执行过程中的调试信息。
如果verbose:true的时候callback返回中多一个stats字段:
输出结果如下:
参数说明:
result:储存结果的collection的名字
input:满足条件的数据行数
emit:emit调用次数,也就是所有集合中的数据总量
ouput:返回结果条数
timeMillis:执行时间,毫秒为单位
ok:是否成功,成功为1
err:如果失败,这里可以有失败原因
上面的replace执行之后会发现数据库中会多出一个输出数据库,如图: