> db.emp.mapReduce(
function
() { emit(
this
.department,
1
); },
function
(key,values) {
return
Array
.sum(values) }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
3
}
{
"_id"
:
"HR"
,
"value"
:
2
}
{
"_id"
:
"Planning"
,
"value"
:
1
}
{
"_id"
:
"Sales"
,
"value"
:
2
}
利用内置的sum函数返回每个部门的人数
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values) }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
{
"_id"
:
"HR"
,
"value"
:
5250
}
{
"_id"
:
"Planning"
,
"value"
:
5000
}
{
"_id"
:
"Sales"
,
"value"
:
7000
}
利用内置的avg函数返回每个部门的工资平均数
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values).toFixed(
2
) }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
"7166.67"
}
{
"_id"
:
"HR"
,
"value"
:
"5250.00"
}
{
"_id"
:
"Planning"
,
"value"
:
5000
}
{
"_id"
:
"Sales"
,
"value"
:
"7000.00"
}
> 保留两位小数
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.sum(values) }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
21500
}
{
"_id"
:
"HR"
,
"value"
:
10500
}
{
"_id"
:
"Planning"
,
"value"
:
5000
}
{
"_id"
:
"Sales"
,
"value"
:
14000
}
> 利用内置的sum函数返回每个部门的工资总和
> db.emp.mapReduce(
function
() { emit(
this
.department,{count:
1
}); },
function
(key,values) {
var
sum=
0
; values.forEach(
function
(val){sum+=val.count});
return
sum; }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
3
}
{
"_id"
:
"HR"
,
"value"
:
2
}
{
"_id"
:
"Planning"
,
"value"
: {
"count"
:
1
} }
{
"_id"
:
"Sales"
,
"value"
:
2
}
> 手工计算每个部门的员工总数
> db.emp.mapReduce(
function
() { emit(
this
.department,{salct:
this
.salary,count:
1
}); },
function
(key,values) {
var
res={salct:
0
,sum:
0
}; values.forEach(
function
(val){res.sum+=val.count;res.salct+=val.salct});
return
res; }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
: {
"salct"
:
21500
,
"sum"
:
3
} }
{
"_id"
:
"HR"
,
"value"
: {
"salct"
:
10500
,
"sum"
:
2
} }
{
"_id"
:
"Planning"
,
"value"
: {
"salct"
:
5000
,
"count"
:
1
} }
{
"_id"
:
"Sales"
,
"value"
: {
"salct"
:
14000
,
"sum"
:
2
} }
> 手工计算每个部门的员工总数和工资总数
> db.emp.mapReduce(
function
() { emit(
this
.department,{salct:
this
.salary,count:
1
}); },
function
(key,values) {
var
res={salct:
0
,sum:
0
}; values.forEach(
function
(val){res.sum+=val.count;res.salct+=val.salct});
return
res.salct/res.sum; }, { out:
"depart_summary"
} ).find()
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
{
"_id"
:
"HR"
,
"value"
:
5250
}
{
"_id"
:
"Planning"
,
"value"
: {
"salct"
:
5000
,
"count"
:
1
} }
{
"_id"
:
"Sales"
,
"value"
:
7000
}
> 手工计算每个部门的工资平均值
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values) }, { out:
"depart_summary"
} ).find({value:{$gt:
5000
}})
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
{
"_id"
:
"HR"
,
"value"
:
5250
}
{
"_id"
:
"Sales"
,
"value"
:
7000
}
将分组计算后的值进行过滤显示,只显示工资平均数大于
5000
的部门
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values) }, { out:
"depart_summary"
} ).find({value:{$gt:
5000
}}).sort({value:
1
})
{
"_id"
:
"HR"
,
"value"
:
5250
}
{
"_id"
:
"Sales"
,
"value"
:
7000
}
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
将分组计算后的值进行排序,默认为升序
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values) }, { out:
"depart_summary"
} ).find({value:{$gt:
5000
}}).sort({value:-
1
})
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
{
"_id"
:
"Sales"
,
"value"
:
7000
}
{
"_id"
:
"HR"
,
"value"
:
5250
}
> 将分组计算后的值进行排序,手工指定降序
> db.emp.mapReduce(
function
() { emit(
this
.department,
this
.salary); },
function
(key,values) {
return
Array
.avg(values) }, { out:
"depart_summary"
} ).find({value:{$gt:
5000
}}).sort({value:-
1
}).limit(
2
)
{
"_id"
:
"Development"
,
"value"
:
7166.666666666667
}
{
"_id"
:
"Sales"
,
"value"
:
7000
}
> 将分组计算后的值进行降序排序后,取其中的两个值
> db.emp.mapReduce(
function
() { emit(
this
.department,{count:
1
}); },
function
(key,values) {
var
sum=
0
; values.forEach(
function
(val){sum+=val.count});
return
sum; }, { out:
"depart_summary"
,query:{age:{$gt:
25
}} } ).find()
{
"_id"
:
"Development"
,
"value"
: {
"count"
:
1
} }
{
"_id"
:
"HR"
,
"value"
: {
"count"
:
1
} }
{
"_id"
:
"Sales"
,
"value"
: {
"count"
:
1
} }
> 分组前过滤数据,然后再分组计算
> db.emp.mapReduce(
function
() { emit(
this
.department,{count:
1
}); },
function
(key,values) {
var
sum=
0
; values.forEach(
function
(val){sum+=val.count});
return
sum; }, { out:
"depart_summary"
,query:{age:{$gt:
22
}},sort:{age:
1
} } ).find()
{
"_id"
:
"Development"
,
"value"
:
2
}
{
"_id"
:
"HR"
,
"value"
:
2
}
{
"_id"
:
"Planning"
,
"value"
: {
"count"
:
1
} }
{
"_id"
:
"Sales"
,
"value"
:
2
}
> 分组前过滤数据,并排序,然后再分组计算 (本示例无意义)