刚开始浏览《Mongodb入门手册》时候看到mapreduce,当时感觉好难,就直接疏忽了。现在重新看到这部份知识的时候,痛下决心学习这块知识。
MongoDB的MapReduce相当于Mysql中“group by”,在mongodb上使用mapreduce履行并行数据统计很容易;使用MapReduce要实现两个函数: map 和 reduce.
map函数调用emit(key,value)遍历collection中所有的记录,将key和value传递给Reduce函数履行处理。Map函数和Reduce函数可使用javascript来实现。下面我们来学习下mapreduce的方法参数:
Map函数必须调用emit(key,value)返回键值对,使用this访问当前待处理的document.在本例中,map函数对students表按classid进行分组:
value可使用json object传递(支持多个属性值),以下面代码表示:
emit(this.classid,{count:1})
Reduce函数传递的参数类似与group 效果,将map返回的键值序列组合成{key,[value1,value2,value3,...]}传递给reduce,以下面代码所示:
Reduce函数对这些values进行统计,在本例中,reduce函数就是分别针对班级的记录数量进行履行求和计算,返回结果是json object 对象
计算后如何取得结果,这正是result函数的作用。可以履行db.结果集。find()可以取得结果。其中结果集合可以通过out变量指定。
利用finalize()可以对reduce的结果进行输出样式的格式化处理。
6. options定制输出
还可以添加更多的控制细节,只需要在res函数的定义中加入1个query参数,既可以进1步过滤结果集,以下面的代码所示:
对照查询结果:
上一篇 第14周项目3-多科成绩单