之前在《MongoDB基础之聚合查询示例》提供了一组分类和文章的测试数据,以下就在之前的这一组数据基础上做计算模型操作。
5.1 按 category_id 分组统计条数
db.post.mapReduce(
function(){
emit(this.category_id,1)
},
function(key,values){
var cnt = 0;
values.forEach(function(value){
cnt += value
})
return cnt;
},
{
out:'cnt'
}
).find();
5.2 按 category_id 和 author 两个字段分组统计
db.post.mapReduce(
function(){
emit({author:this.author, category_id:this.category_id},1)
},
function(key,values){
var cnt = 0;
values.forEach(function(value){
cnt += value;
})
return cnt;
},
{
out:'cnt'
}
).find();
5.3 按 category_id 分组后,统计条数和点击总数
db.post.mapReduce(
function(){
emit(this.category_id,{count:1,hits:this.hits})
},
function(key,values){
var cnt = 0;
var sum = 0;
values.forEach(function(value){
cnt += value.count;
sum += value.hits
})
return {
count: cnt,
hits: sum
}
},
{
out:'summary'
}
).find()
5.4 按 category_id 分组后,统计条数和点击总数量,最后在求平均点击数
db.post.mapReduce(
function(){
emit(this.category_id,{count:1,hits:this.hits})
},
function(key,values){
var cnt = 0;
var sum = 0;
values.forEach(function(value){
cnt += value.count;
sum += value.hits
})
return {
count : cnt,
hits : sum
}
},
{
out:'summary',
finalize: function(key,reduceResult){
reduceResult.avg = (reduceResult.sum/reduceResult.cnt).toFixed(2)
return reduceResult
}
}
).find()
参考文档:https://www.cnblogs.com/Joe-T/p/4264910.html
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/42