Node.Js中使用MongoDB中的MapReduce

官网示例参考:http://mongodb.github.com/node-mongodb-native/api-generated/collection.html?highlight=mapreduce#mapReduce

MapReduce是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题。

MapReduce的功能有点类似于mysql中的group by 。

MapReduce中主要有两个函数map和reduce进行统计,map为reduce提供输入,输入的是key-value集合。

下面我们在数据库中插入如下数据:

image

nodejs中的代码如图:

image

得到的结果如下图:

image

从结果中可以看出对性别为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字段:

image

输出结果如下:

image

参数说明:

result:储存结果的collection的名字
input:满足条件的数据行数
emit:emit调用次数,也就是所有集合中的数据总量
ouput:返回结果条数
timeMillis:执行时间,毫秒为单位
ok:是否成功,成功为1
err:如果失败,这里可以有失败原因

上面的replace执行之后会发现数据库中会多出一个输出数据库,如图:

image

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值