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 }
java操作 mongodb 进行 按天、周、月分组统计
Wesley13
2021-10-11
1334 1 0
点赞
收藏
评论区
加载中...