MongoDB 学习笔记—MapReduce

本文介绍了MongoDB中MapReduce的基本工作流程,包括查询集合、使用map函数处理数据、执行reduce函数进行聚合处理以及最终输出结果。通过示例展示了如何实现简单的数据聚合任务。
db.runCommand(
 { mapreduce : <collection>,
   map : <mapfunction>,
   reduce : <reducefunction>
   [, query : <query filter object>]
   [, sort : <sort the query.  useful for optimization>]
   [, limit : <number of objects to return from collection>]
   [, out : <see output options below>]
   [, keeptemp: <true|false>]
   [, finalize : <finalizefunction>]
   [, scope : <object where fields go into javascript global scope >]
   [, verbose : true]  }
);

  这两天小小的学习了一下MongoDB,关于MapReduce的介绍就不再多说,可以参考官方文档:http://www.mongodb.org/display/DOCS/MapReduce,使用示例可以看这里:https://github.com/mongodb/mongo/blob/master/jstests/mr5.js,这里仅从个人理解角度对MapReduce的工作步骤做个简单记录:

  1. 对collection进行查询。
  2. 对查询结果使用map函数进行处理,在map方法中至少要调用一次内置函数emit,该函数需要两个参数。第一个是参数key,可以理解为关系数据库查询中的group by的字段,第二个是参数是value,也就是要进行聚合操作的字段。emit的作用是根据key,把value组合为一个数组,为reduce提供输入参数值。
  • 例:
    m = function(){
    	if (this.userid==123){
    		emit(this.userid, this.money)
    	}
    }
执行reduce处理,reduce需要两个参数,第一个参数是key,第二个参数是value数组,也就是上一步中产生的结果。在这个函数里进行聚合处理,并返回处理后的对象。
  1. 例:
    r = function(key, values){
    	var sum = 0;
    	for (var i = 0; i < values.length; i ++)
    	{
    		sum += values[i];
    	}
    	return {userid : key, sum : sum};
    }
对上一步的结果进行finalize处理。 把结果输出到out指定的目标。(v1.7以上版本可以指定out:{inline : 1} 直接返回结果集)
db.users.mapReduce(m, r, {out : {inline : 1}})

转载于:https://www.cnblogs.com/ideas/archive/2011/03/28/1997727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值