文档章节

Monogdb使用 MapReduce进行分组统计查询

藏言
 藏言
发布于 2014/06/18 13:54
字数 322
阅读 79
收藏 0
/**

  * 

  * @param businessNo 

  * @param beginTime 开始时间

  * @param endTime 结束时间

  * @param pageNo  页码

  * @param pageSize 分页大小

  * @return

  */

 public static List<DBObject> query(Integer businessNo,Date beginTime,Date endTime,int pageNo,int pageSize){


  StringBuffer map = new StringBuffer();

  map.append("function(){ ");

  map.append("  var t = new Date(this.createTime);");

  map.append("  emit({ ");

  map.append("     orgId:this.orgId,");

  map.append("     operatorId:this.operatorId,");

  map.append("     objId:this.businessParam.objId,");

  map.append("     creatDate:t.getFullYear() +'-'+(t.getMonth() + 1)+'-'+t.getDate()");

  map.append("   },");

  map.append("   {count:1}");

  map.append("  ); ");

  map.append("} ");

  log.info(">>>>>>>map:{}",map.toString());

  

  StringBuffer reduce = new StringBuffer();

  reduce.append("function(key, values) {");

  reduce.append("  var total = 0;");

  reduce.append("  for (var i=0; i<values.length; i++) { ");

  reduce.append("     total += values[i].count;");

  reduce.append("  } ");

  reduce.append("  return {count: total}; ");

  reduce.append("} ");

  log.info(">>>>>>>reduce:{}",reduce.toString());

  

  StringBuffer finalize = new StringBuffer();

  finalize.append("function(key, rvalues) { ");

  finalize.append("   var sum = 0; ");

  finalize.append("   if(rvalues.count>0){ ");

  finalize.append("      rvalues.get='true'; ");

  finalize.append("   }else{ ");

  finalize.append("      rvalues.get='false'");

  finalize.append("   } ");

  finalize.append("   return rvalues; ");

  finalize.append("}");

  log.info(">>>>>>>finalize:{}",finalize.toString());

  

  //查询条件

  DBObject query = new BasicDBObject();

  query.put("businessNo", businessNo);

  query.put("operatorId", new BasicDBObject("$exists", true).append("$ne", 0));

  query.put("createTime", new BasicDBObject("$gte", beginTime.getTime()).append("$lte", endTime.getTime()));

  query.put("businessParam.objId", new BasicDBObject("$exists", true));

 
  DBObject command = new BasicDBObject();

  command.put("mapreduce", "MyLogs");

  command.put("query", query);

  command.put("map", map.toString());

  command.put("reduce", reduce.toString());

  command.put("out", "MapReduceCommand.OutputType.INLINE");

  command.put("verbose", true);

  

  DBCollection db = MongoDbInit.getDb().getCollection("MyLogs");

  command.put("finalize", finalize.toString());

  MapReduceOutput out = db.mapReduce(command);

  

  DBObject having = new BasicDBObject();

  having.put("value.get", "true");

  

  DBObject orderBy = new BasicDBObject();

  orderBy.put("createTime", -1);//按createTime倒序排  

  

  int skip = (pageNo-1)*pageSize;

  List<DBObject> resultList = new ArrayList();

  resultList = out.getOutputCollection().find(having).sort(orderBy).skip(skip).limit(pageSize).toArray();

  return resultList;

 }

 

数据结构

{

  "_id" : ObjectId("52f9c392b7603fe75cff49e7"),

  "deviceId" : "ffffffff-d0b9-867d-191b-921900000000",

  "operationTime" : NumberLong("1392100740000"),

  "operatorType" : 1,

  "operatorId" : 3587,

  "platform" : "android",

  "businessStatus" : 1,

  "sessionId" : "",

  "orgId" : 104,

  "businessName" : "活动详情",

  "createTime" : NumberLong("1392100242676"),

  "businessParam" : {

    "objId" : 653,

    "time" : 715,

    "objType" : 1

  },

  "businessNo" : 1101

}

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
藏言
粉丝 6
博文 23
码字总数 4021
作品 1
厦门
程序员
私信 提问
MongoDB Map Reduce

【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简) Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。 MongoD...

mickelfeng
2017/11/17
0
0
MongoDB高级一点点的操作

在MongoDB数据库中常见的聚合操作有:count,distinct,group,mapReduce。现在将它们一一的记录下来: 一、count操作 这个操作顾名思义就是达到统计的效果啦,用来统计符合某一种查询条件的...

BravoZu
2014/01/21
0
0
基于 MongoDB 分布式存储进行 MapReduce 并行查询

之前的文章中介绍了如何基于Mongodb进行关系型数据的分布式存储,有了存储就会牵扯到查询。虽然用普通的方式也可以进行查询,但今天要介绍的是如何使用MONGODB中提供的MapReduce功能进行查询...

小编辑
2010/11/25
1K
0
7个实例全面掌握Hadoop MapReduce

作者介绍 杜亦舒,创业中,技术合伙人,喜欢研究分享技术。个人订阅号:性能与架构。 本文旨在帮您快速了解 MapReduce 的工作机制和开发方法,解决以下几个问题: 文章中提供了程序实例中涉及...

杜亦舒
2017/06/08
0
0
MapReduce初探之一~~基于Mongodb实现标签统计

MapReduce 是一种编程模型,是 Google 提出的一种软件架构,主要应用于分布式系统上。Google对其原始的定义是“ MapReduce is a framework for computing certain kinds of distributable pr...

zhiweiofli
2013/03/06
0
5

没有更多内容

加载失败,请刷新页面

加载更多

统一客服消息返回错误:{"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"}

公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景:小程序使用公众号的服务消息,推送消息,如果接收人没有关注公众号,就会出...

tianma3798
17分钟前
1
0
Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
35分钟前
2
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
41分钟前
1
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
44分钟前
2
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部