MongoDB の MapReduce
在Hadoop的学习中已经接触过MapReduce了,它是一个很成熟的计算模型,将大批量的工作(也就是数据)分解(MAP映射)执行,最后将结果合并成最终的Reduce.
MongoDB就提供了一个很灵活的MapReduce
MapReduce的基本语法
>db.collection.mapReduce(
function() {emit(key,value);}, //map 函数
function(key,values) {return reduceFunction}, //reduce 函数
{
out: collection,
query: document,
sort: document,
limit: number
}
)
使用Map Reduce需要实现两个函数,Map和Reduce,Map调用了emit(key,value),遍历了collection(也就是表)里面的所有记录,并且将key和value传给reduce函数进行处理
说明:
- map:映射函数(生成键值对的序列,所谓reduce的参数)
- reduce统计函数,reduce函数的任务就是将key-values变成key_value(将Values数组变成一个单一的value)
- out统计结果存放集合(如果不指定的话,会使用临时集合,客户端断开以后就会删除)
- query是一个筛选条件(不是每个文档都会触发map函数)
- sort和limit
做个小测试,往里面插入一点数据试一下
collection中的数据如下图所示
选取已发布的文章,用user_name分组,使用find函数展示
map函数和reduce函数都可以使用JS来实现,所以非常方便