文档章节

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

藏言
 藏言
发布于 2014/06/18 13:54
字数 322
阅读 60
收藏 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高级一点点的操作

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

BravoZu
2014/01/21
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
MapReduce 模式、算法和用例

本文另一地址请见 MapReduce 模式、算法和用例 本文译自 Mapreduce Patterns, Algorithms, and Use Cases 在这篇文章里总结了几种网上或者论文中常见的MapReduce模式和算法,并系统化的解释了...

可观
2012/10/30
0
5
MapReduce的模式、算法和用例

在这篇文章里总结了几种网上或者论文中常见的MapReduce模式和算法,并系统化的解释了这些技术的不同之处。所有描述性的文字和代码都使用了标准hadoop的MapReduce模型,包括Mappers, Reduces,...

绝艳天纵
2013/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

git +STS使用问题解决一

1. 2.点以一个pull就是更新代码 3.synchronize workSpace 同步代码,同SVN一致

森火
4分钟前
0
0
powerBi odbc 连接impala 实现自助分析

配置Impala以使用ODBC 可以将第三方产品设计为使用ODBC与Impala集成。为获得最佳体验,请确保支持您打算使用的任何第三方产品。验证支持包括检查Impala,ODBC,操作系统和第三方产品的版本是...

hblt-j
9分钟前
0
0
Purism FAQ

<font size="37" color="#006248" face="幼圆"> <p align="center"> Purism FAQ </p> </font> 原文:https://puri.sm/faq/ 原作者:Purism Team 翻译者:冰焰火灵X 1079092922@qq.com 文章许......

ICE冰焰火灵X
24分钟前
0
0
nginx+webdav

1、配置Nginx以支持WebDav: Webdav是nginx一个组件,默认编译nginx时是没有安装这个组件的。 如果跟应用公用一个nginx,需要重新编译安装nginx,重新安装前需要备份好原来的nginx.conf。 1....

yaukie
30分钟前
0
0
spring 事件

ContextRefreshedEvent Event raised when an {@code ApplicationContext} gets initialized or refreshed. ContextClosedEvent Event raised when an {@code ApplicationContext} gets clos......

Canaan_
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部