对MongoDB学习笔记MapReduce应用实例

1。MapReduce是根据map函数中调用的发出函数的第一个参数分组的。

map是一种计算模型。简单地说,它是分解大量的数据(map),然后将结果合并到最终结果(减少)。

要使用MapReduce,我们需要实现两个函数,map函数和减函数。map函数调用发出(键,值),遍历集合中的所有记录,并传输键和值以减少函数。map函数必须调用发射(键、值)返回键值对。

参数描述:

1。映射函数(生成键值对作为减少函数参数)。

2。减少统计函数,减函数的任务是将键值转换为键值,也就是将值数组转换为单个值。

三.统计结果存储在集合中(使用未指定的临时设置,在客户端断开后自动删除)。

4。查询筛选条件,只有满足条件的文件,调用地图的功能。(query.limit,排序可随意组合)

5。排序和限制排序排序参数的组合(也可以在map函数之前对文档进行排序)可以优化分组机制。

发送到map函数的文档数量的上限为6。限制(如果没有限制,仅使用排序)是不太有用的。


准备测试数据
Db.user.drop();

对于(var i = 10;i < 100;i + +){
Db.user.insert({
名称:用户+ i,
年龄:Math.floor(Math.random()* 10)+ 20,
性别:Math.floor(Math.random)*(3)% 2 = = 0是:F,
中文:Math.floor(Math.random()* 50)+ 50,
数学:Math.floor(Math.random()* 50)+ 50,
英语:math.floor(Math.random()* 50)+ 50,
类:C+ i % 5
})
}


/ / RunCommand操作模式
db.sales.runcommand({
MapReduce:用户

映射:函数(){
如果(this.class = = C1){
(this.age发出,这个年龄);
}
},

减少:函数(键,值){
VaR最大=马克斯(键,值);
收益最大;
},

{
输出:{内联:1 },
查询:
排序:
限制:
}
})


Db.user.mapReduce(
映射函数,这称为发出(键,值),集合将根据您指定的键的映射进行分组。
函数(){
根据发出函数的第一个参数进行分组。
传递给减少的第二个参数的值。
(this.age发出,这);
},

简化了map、/、分组数据包的简化功能。
/ /减少(键,值)的关键是发射键,值发出发出(值)分组后组
函数(键,值){
VaR最大= math.max(键,值);
收益最大;
},

可选参数
{
查询:{{},
输出:结果
排序:{ },
限制:0
}





实施结果:


{
结果:结果
timemillis :23,
计数:{
输入:29,传入文档的数量
发出:29,调用此函数的次数
减少:6,调用此函数的次数
输出:8号/最后一个返回文档
},
OK:1
}




查看返回的结果:


Db.result.find()