`

mongodb 使用mapreduce统计

阅读更多
原始数据:
> db.sdk_counter.find();
{ "_id" : ObjectId("53395c10cb8d5d3a6b878f01"), "stat_date" : "2014-03-25", "show_count" : 4, "click_count" : 0 }
{ "_id" : ObjectId("53395c14cb8d5d3a6b878f02"), "stat_date" : "2014-03-23", "show_count" : 4, "click_count" : 0 }
{ "_id" : ObjectId("53395c1ccb8d5d3a6b878f03"), "stat_date" : "2014-03-24", "show_count" : 4, "click_count" : 10 }
{ "_id" : ObjectId("53395c23cb8d5d3a6b878f04"), "stat_date" : "2014-03-24", "show_count" : 3, "click_count" : 1 }

字段含义:
stat_date:日期
show_count:展示量
click_count:点击量

一、实现功能:分年、分月、分日期、分年和月查看展示量和点击量
==================================
var m = function(){
var year = this.stat_date.substr(0,4);
var month = this.stat_date.substr(5,2);
var day = this.stat_date.substr(8,2);
var yearAndMonth = this.stat_date.substr(0,7);
//此处填写year/month/day/yearAndMonth即可以实现功能
emit(yearAndMonth,{show_count:this.show_count,click_count:this.click_count});
};
var r = function(key,values){
    var show = 0;
    var click = 0;
    for(var i in values){
      show += values[i].show_count;
      click += values[i].click_count;
    }
    return {"show_count":show,"click_count":click};
};
db.sdk_counter.mapReduce(m,r,"sdk_counter_tmp");
db.sdk_counter_tmp.find();

按月份> db.sdk_counter_tmp.find();
{ "_id" : "03", "value" : { "show_count" : 15, "click_count" : 11 } }
按年份> db.sdk_counter_tmp.find();
{ "_id" : "2014", "value" : { "show_count" : 15, "click_count" : 11 } }
按日期> db.sdk_counter_tmp.find();
{ "_id" : "23", "value" : { "show_count" : 4, "click_count" : 0 } }
{ "_id" : "24", "value" : { "show_count" : 7, "click_count" : 11 } }
{ "_id" : "25", "value" : { "show_count" : 4, "click_count" : 0 } }


二、算总量
var m = function(){emit(1,{show_count:this.show_count,click_count:this.click_count})};
var r = function(key,values){
    var show = 0;
    var click = 0;
    for(var i in values){
      show += values[i].show_count;
      click += values[i].click_count;
    }
    return {"show_count":show,"click_count":click};
};
db.sdk_counter.mapReduce(m,r,"sdk_counter_tmp");
db.sdk_counter_tmp.find();
> db.imacha_sdk_counter_tmp.find();
{ "_id" : 1, "value" : { "show_count" : 15, "click_count" : 11 } }

总结:
1.mongo使用mapreduce实现类似mysql中分组统计的需求,关键是找对分组key,而其map中的emit函数的key参数至关重要,它是字段值而不是字段!
2.map的emit()的value要和reduce的return 字段包含
分享到:
评论

相关推荐

    计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv

    计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv

    MongoDB的MapReduce.pdf

    如果我们想要统计每个用户发布文章的数量,可以使用MapReduce。Map函数会遍历所有文档,对于每个用户,emit一个键为用户名,值为1的键值对。Reduce函数则会将所有同名用户的值加起来,得到每个用户的文章总数。 Map...

    MongoDB MapReduce分享.ppt

    在 MongoDB 中,MapReduce 功能可以用来进行数据聚合、统计分析以及创建索引等任务。 1. **Map 函数**: - Map 函数由用户自定义,用于遍历输入文档,提取关键信息,并生成中间键值对。例如,你可以用它来统计网站...

    MongoDB中的MapReduce简介

    MapReduce在MongoDB中的应用非常适合于大数据分析、聚合操作和复杂统计。例如,你可以使用MapReduce来计算用户行为的汇总信息,进行分类或聚类分析,或者在大型日志文件中提取有价值的信息。然而,需要注意的是,...

    mongodb mapreduce 实例

    总结来说,MongoDB的MapReduce功能为我们提供了一种有效处理和分析大规模订单数据的方法,通过自定义的map和reduce函数,可以实现各种复杂的统计需求,这对于理解和优化业务表现非常有价值。在电子商务领域,这样的...

    MongoDB中MapReduce编程模型使用实例

    通过单词计数的实例,我们可以理解MongoDB中MapReduce编程模型的使用方式和特点。 单词计数示例是MapReduce的一个典型应用,其基本思想是统计文本中每个单词出现的次数。在MongoDB中,首先需要准备好待处理的文档...

    MongoDB学习笔记之MapReduce使用示例

    执行结果展示了MapReduce操作的统计信息,包括输入文档的数量(input)、emit函数被调用的次数(emit)、reduce函数被调用的次数(reduce)以及最终返回文档的数量(output)。 通过这个示例,我们可以看到MongoDB...

    Pentaho Analytics for MongoDB Cookbook(2015)随书代码

    《Pentaho Analytics for MongoDB Cookbook(2015)随书代码》是针对大数据分析领域的一本实战指南,尤其关注如何使用Pentaho工具与MongoDB数据库进行有效的数据分析。这本书包含五个关键章节的源代码,涵盖了从数据...

    Mongodb最佳实践

    5.聚合运算,支持Group,Aggregation, MapReduce 的统计和集合 6.全文检索和地理位置信息检索使用 7.主从复制搭建 8.sharding分片集群 9.数据库监控和profiling使用 通过这些学习对Mongodb全方位的学习和理解,适应...

    MongoDB权威指南+深入MongoDB

    MongoDB使用JSON-like的BSON数据格式存储数据,这种格式便于理解和操作。它支持集合(collections)、文档(documents)和数据库(databases)的概念。集合是文档的集合,类似关系数据库中的表;文档则是键值对的...

    mogodb mapreduce方法

    MongoDB的MapReduce是一种强大的数据分析工具,用于处理和聚合大量数据。...在这个例子中,我们实现了按年龄分组并计算用户数量的功能,但实际的MapReduce操作可以实现更复杂的统计和分析,如聚类、分类、排序等。

    MongoDB期末考试测试题

    在MongoDB中,可以使用`use`命令切换到特定的数据库,如`xsgl`,然后使用`insert`方法批量添加数据到`member`集合。例如,创建一个包含学生信息的文档并插入数据。 2. 查询操作: `find`方法用于查找集合中的数据...

    MongoDB in action 源码

    8. MapReduce:虽然现代MongoDB推荐使用聚合框架,但MapReduce仍然是一种处理大数据的手段,用于批量数据处理和分析。 9. 安全性:MongoDB支持用户认证、角色权限控制和加密通信,保障数据安全。 10. 应用集成:...

    MongoDB for Java Developers的随书阅读代码

    《MongoDB for Java Developers》这本书正是针对这一主题,帮助开发者深入理解和使用MongoDB与Java的结合。 该书的随书阅读代码包含了书中多个章节的实例,这些代码分布在名为"micai-mongodb-chapter6"、"micai-...

    MongoDB

    - MongoDB提供了聚合框架,用于处理复杂的统计分析和数据转换,如`$match`、`$group`、`$sort`、`$project`等管道操作符。 7. MapReduce: - MongoDB的MapReduce功能允许用户编写JavaScript函数进行分布式计算,...

Global site tag (gtag.js) - Google Analytics