文档章节

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

藏言
 藏言
发布于 2014/06/18 13:54
字数 322
阅读 72
收藏 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

}

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
藏言
粉丝 5
博文 22
码字总数 3299
作品 0
厦门
程序员
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
7个实例全面掌握Hadoop MapReduce

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

杜亦舒
2017/06/08
0
0
mongo中的高级查询之聚合操作(distinct,count,group)

Mongodb中自带的基本聚合函数有三种:count、distinct和group。下面我们分别来讲述一下这三个基本聚合函数。 (1)count 作用:简单统计集合中符合某种条件的文档数量。 使用方式:db.collec...

mickelfeng
2017/11/03
0
0
MapReduce初探之一~~基于Mongodb实现标签统计

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

zhiweiofli
2013/03/06
0
5

没有更多内容

加载失败,请刷新页面

加载更多

emoji

前言:随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编...

HeroHY
34分钟前
2
0
rabbitmq学习(二)

生产者消费者初级案列 ChannelUtils package com.hensemlee.rabbitmq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Connecti......

hensemlee
44分钟前
1
0
MarkDown入门简介

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。Markdown的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多...

一零贰IV
48分钟前
1
0
druid配置db2参考记录

Driver Name:COM.ibm.db2.jdbc.app.DB2 Driver Type 4 Driver URL Pattern:jdbc:db2://ServerIP:50000/databasename ${driverClassName} 这个参数没有在spring相关的properties文件中配置 ......

tonyfox
51分钟前
1
0
用户体验要素——以用户为设计中心

一、用户体验是什么 产品会与外界发生联系,人们如何去使用产品,人们使用产品无非解决两种问题,一,提高效率;二娱乐。而用户体验兼顾着功能和界面两个方面,为的是“提高人们的工作效率”...

铸剑为犁413
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部