`

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实现数据聚合方法详解

    (3)使用mapReduce进行统计; 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明。 MapReduce是啥呢?以我的理解,其实就是对集合中的各个满足条件的文档进行预处理,整理出想要的...

    mongodb mapreduce 实例

    mongodb mapreduce 实例,该例子主要用来做订单统计的。具体问题请到博客提问。

    Mongodb最佳实践

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

    Mongodb聚合函数count、distinct、group如何实现数据聚合操作

    上篇文章给大家介绍了Mongodb中MapReduce实现数据聚合方法详解,我们提到过Mongodb中进行数据聚合操作的一种方式——MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作。在这边文章中,...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    第7章 MapReduce统计 7.1 Map函数 7.2 Reduce函数 7.3 结果存储 7.4 对Reduce函数结果进一步处理 7.5 其他控制细节 7.6 本章小结 第3篇 管理篇 第8章 管理 8.1 启动和停止MongoDB 8.1.1 使用...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    第7章 MapReduce统计 7.1 Map函数 7.2 Reduce函数 7.3 结果存储 7.4 对Reduce函数结果进一步处理 7.5 其他控制细节 7.6 本章小结 第3篇 管理篇 第8章 管理 8.1 启动和停止MongoDB 8.1.1 使用...

    socialsensor-multimedia-analysis:包含一组对传入媒体项目流的分析过程

    ContributorsCounter 基于 mongodb 的 MapReduce 操作,统计每个时间段唯一贡献者(用户)的数量。 要每 30 分钟初始化和执行一次贡献者计数器,请运行以下代码: ContributorsCounter counter = new ...

    udacity-data-analyst-nanodegree:Udacity数据分析师纳米度的项目工作

    描述性统计推论统计Python简介数据科学导论使用MongoDB进行数据整理用R进行数据分析机器学习入门数据可视化和D3.js A / B测试获得的技能: Python(包括numpy,pandas,scikit-learn,ggplot ...) MongoDB ...

    大数据整体架构.zip

    在数据存储方面,该文档解释了如何使用分布式文件系统(如Hadoop的HDFS)和NoSQL数据库(如MongoDB和Cassandra)来存储大量数据。它还介绍了数据湖的概念,这是一种存储原始数据的方法,以便后续进行处理和分析。在...

    【前端素材】大数据-设备统计.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-大屏数据统计.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-物联网平台数据统计.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-大数据统计展示大屏.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-XXX科技业务数据统计.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

Global site tag (gtag.js) - Google Analytics