您的位置:首页 > 数据库 > Mongodb

Node.Js中使用MongoDB中的MapReduce

2013-04-27 19:35 477 查看
官网示例参考: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集合。

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





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执行之后会发现数据库中会多出一个输出数据库,如图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: