程序员人生 网站导航

【MongoDB】MongoDB数据库之MapReduce编程模型

栏目:数据库应用时间:2014-12-17 07:57:31

刚开始浏览《Mongodb入门手册》时候看到mapreduce,当时感觉好难,就直接疏忽了。现在重新看到这部份知识的时候,痛下决心学习这块知识。

1、概念说明

MongoDB的MapReduce相当于Mysql中“group by”,在mongodb上使用mapreduce履行并行数据统计很容易;使用MapReduce要实现两个函数: map 和 reduce. 

map函数调用emit(key,value)遍历collection中所有的记录,将key和value传递给Reduce函数履行处理。Map函数和Reduce函数可使用javascript来实现。下面我们来学习下mapreduce的方法参数: 


2、举例说明

1. 创建初始化数据


2. Map进行分组

Map函数必须调用emit(key,value)返回键值对,使用this访问当前待处理的document.在本例中,map函数对students表按classid进行分组:


value可使用json object传递(支持多个属性值),以下面代码表示:

emit(this.classid,{count:1})

3. Reduce聚合计算

Reduce函数传递的参数类似与group 效果,将map返回的键值序列组合成{key,[value1,value2,value3,...]}传递给reduce,以下面代码所示:


Reduce函数对这些values进行统计,在本例中,reduce函数就是分别针对班级的记录数量进行履行求和计算,返回结果是json object 对象

4. Result获得结果

计算后如何取得结果,这正是result函数的作用。可以履行db.结果集。find()可以取得结果。其中结果集合可以通过out变量指定。


5. Finialize格式化输出

利用finalize()可以对reduce的结果进行输出样式的格式化处理。


6. options定制输出

还可以添加更多的控制细节,只需要在res函数的定义中加入1个query参数,既可以进1步过滤结果集,以下面的代码所示:


对照查询结果:


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐