java操作 mongodb 进行 按天、周、月分组统计

1public List<PlaybackEntity> queryPlaybackRecord(FunctionUseQueryEntity queryEntity){ 2 Criteria criteria = Criteria.where("createTime").gte(queryEntity.getStartTime()).lte(queryEntity.getEndTime()) 3 .and("status").is(1); 4 Query query = Query.query(criteria); 5 6 BasicDBObject initial = new BasicDBObject(); 7 initial.put("playbackNum", 0); 8 9 String reduce = getReduce(); 10 //进行按天、周、月分组 11 String keyf = getKeyf(queryEntity); 12 13 DBCollection collection = mongoTemplate.getCollection(COLLNAME); 14 15 GroupCommand xx = new GroupCommand(collection, keyf, query.getQueryObject(), initial, reduce, null); 16 17 BasicDBList objects = (BasicDBList)collection.group(xx); 18 19 List<PlaybackEntity> results = new ArrayList<PlaybackEntity>(); 20 if (objects != null) { 21 for (int i = 0; i < objects.size(); i++) { 22 PlaybackEntity play = new PlaybackEntity(); 23 DBObject obj = (DBObject) objects.get(i); 24 play.setFormateTime((String)obj.get("strData")); 25 play.setPlaybackNum((Double)obj.get("playbackNum")); 26 results.add(play); 27 } 28 } 29 return results; 30 } 31 32 private String getKeyf(FunctionUseQueryEntity queryEntity) { 33 StringBuilder keyfBuilder = new StringBuilder(); 34 keyfBuilder.append("function(doc){ ") 35 .append(" var date = new Date(doc.createTime); "); 36 if(DateType.DATE.getValue().equals(queryEntity.getType())){ 37 keyfBuilder.append(" var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1) + '-' + date.getDate();"); 38 }else if(DateType.WEEK.getValue().equals(queryEntity.getType())){ 39 keyfBuilder.append(" var firstDay = new Date(date.getFullYear(),0, 1);") 40 .append(" var dayOfWeek = firstDay.getDay();") 41 .append(" var spendDay= 1;") 42 .append(" if (dayOfWeek !=0) {") 43 .append(" spendDay= 7 - dayOfWeek + 1;") 44 .append(" }") 45 .append(" firstDay = new Date(date.getFullYear(), 0, 1 + spendDay);") 46 .append(" var d =Math.ceil((date.valueOf()- firstDay.valueOf())/ 86400000);") 47 .append(" var week =Math.ceil(d/7);") 48 .append(" week = week + 1;"); 49 keyfBuilder.append(" var dateKey = '' + date.getFullYear()+ '-' + week;"); 50 }else if(DateType.MONTH.getValue().equals(queryEntity.getType())){ 51 keyfBuilder.append(" var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1);"); 52 } 53 keyfBuilder.append(" return {'strData':dateKey}; ") 54 .append(" }"); 55 return keyfBuilder.toString(); 56 } 57 58 private String getReduce() { 59 StringBuilder reduceBuilder = new StringBuilder(); 60 reduceBuilder.append("function Reduce(doc, out) { ") 61 .append(" out.playbackNum += 1; ") 62 .append(" }"); 63 return reduceBuilder.toString(); 64 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java基础知识随身记

2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类

Python之time模块的时间戳、时间字符串格式化与转换

Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y

4,MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB

MongoDB中的关键字有很多,$lt$gt$lte$gte等等,这么多我们也不方便记,这里我们说说几个比较常见的一.查询中常见的等于大于小于大于等于小于等于等于:在MongoDB中什么字段等于什么值其实就是":"来搞定比如"name":"路飞学城"!(https://oscimg.oschin