MongoDB 中聚合查询中 用BasicBDObject拼接条件的方法
2018-11-09 19:14
549 查看
MongoDB 中聚合查询中 用BasicBDObject拼接条件的方法
把拼接的查询条件放到 collection.aggregate()方法中 返回的是一个List类型
public Page<DBObject> findGroupByExecuteFunctions(ServiceExceptionParamModel queryParam) { System.out.println("queryParam.getStartTime()=>"+queryParam.getStartTime()); System.out.println("queryParam.getEndTime()=>"+queryParam.getEndTime()); DBCollection collection = mongoTemplate.getCollection(COLLECTION_NUM ); if(StringUtils.isNotBlank(queryParam.getStartTime())) { String [] time=queryParam.getStartTime().split("\\s"); System.out.println("time[0]"+time[0]); queryParam.setEndTime(time[0]+" 23:59:59"); } System.out.println("queryParam.getEndTime()=>"+queryParam.getEndTime()); //统计符合条件的条数 AggregationOutput pageCount=collection.aggregate(getBrowseCountAggregate( false,queryParam)); List<DBObject> resultsPage=(List<DBObject>) pageCount.results(); ; long totalCount= resultsPage.size(); //System.out.println("totalCount==>"+totalCount); queryParam.pageable().setTotalCount(totalCount); Integer functionCount=0; for(DBObject db: resultsPage){ functionCount+=(Integer)db.get("count"); } System.out.println( "所选时间内所有方法出现次数"+functionCount); //查出符合条件得当前页记录 AggregationOutput allagregate=collection.aggregate(getBrowseCountAggregate( true,queryParam)); List<DBObject> results=(List<DBObject>) allagregate.results() ; //System.out.println(results); //long totalCount =results.size(); for(DBObject db:results){ System.out.println(db.get("_id")+"=>"+db.get("count")); } return new PageImpl<DBObject>(results,queryParam.pageable(),queryParam.totalCount()); }
private List<DBObject> getBrowseCountAggregate( boolean isPage,ServiceExceptionParamModel queryParam){ List<DBObject> aggregateList =new ArrayList<DBObject>(); /*Date today=DateUtil.getTodayBegin();//今天的 00:00:00 Date yesterDay =DateUtil.getTodayBegin();//昨天的 00:00:00 */ Date today=DateUtil.getTodayBegin();//今天的 00:00:00 Date yesterDay =DateUtil.getYesterDay(DateUtil.getTodayBegin());//昨天的 00:00:00 DBObject skip; DBObject limit; System.out.println("today"+today); System.out.println("yesterDay"+yesterDay); //选取时间范围 if(StringUtils.isNotBlank(queryParam.getStartTime())){ BasicDBObject optionmatch=new BasicDBObject( "_id",new BasicDBObject( "$gt", new ObjectId(DateUtil.formateToDate(queryParam.getStartTime()))) .append("$lte", new ObjectId(DateUtil.formateToDate(queryParam.getEndTime()))) ); //选取指定的方法 if(StringUtils.isNotBlank(queryParam.getExecuteFunction())){ optionmatch.put("ExecuteFunction", queryParam.getExecuteFunction()); } //选取指定的类 if(StringUtils.isNotBlank(queryParam.getExecuteClass())){ optionmatch.put("ExecuteClass", queryParam.getExecuteClass()); } //添加筛选条件 $match 是筛选条件 BasicDBObject match=new BasicDBObject("$match",optionmatch); aggregateList.add(match); }else{ System.out.println("today=>"+new ObjectId(today)); System.out.println("yesterDay=>"+new ObjectId(yesterDay)); BasicDBObject optionmatch=new BasicDBObject( "_id",new BasicDBObject( "$gt", new ObjectId(yesterDay)). append("$lte", new ObjectId(today)) ); //选取指定的方法 if(StringUtils.isNotBlank(queryParam.getExecuteFunction())){ optionmatch.put("ExecuteFunction", queryParam.getExecuteFunction()); } //选取指定的方法 if(StringUtils.isNotBlank(queryParam.getExecuteClass())){ optionmatch.put("ExecuteClass", queryParam.getExecuteClass()); } //添加筛选条件 BasicDBObject match=new BasicDBObject("$match",optionmatch); aggregateList.add(match); } // DBObject fields = new BasicDBObject("_id", 1); // fields.put("count", 1); // DBObject project = new BasicDBObject("$project", fields); //BasicDBObject optionGroup =new BasicDBObject("_id","$ExecuteFunction").append("count",new BasicDBObject("$sum",1) ); //添加 分组聚合条件 BasicDBObject optionGroup =new BasicDBObject( "_id",new BasicDBObject( "ExecuteClass","$ExecuteClass") .append("ExecuteFunction","$ExecuteFunction") ); optionGroup.put("count", new BasicDBObject("$sum",1)); optionGroup.put("duration", new BasicDBObject("$avg","$duration")); optionGroup.put("durationMax", new BasicDBObject("$max","$duration")); //拼分组聚合条件 BasicDBObject group =new BasicDBObject("$group",optionGroup); //排序选择器 DBObject sort=null; //按数量排序 如果 有其他排序条件则该条件被覆盖 if(StringUtils.isNotBlank(queryParam.getCountSort() )){ System.out.println("queryParam.getCountSort().toUpperCase()"+queryParam.getCountSort().toUpperCase()); if("ASC".equals(queryParam.getCountSort().toUpperCase())){ sort = new BasicDBObject("$sort", new BasicDBObject( "count", 1)); }else{ sort = new BasicDBObject("$sort", new BasicDBObject( "count", -1)); } } //拼接持续时间 if(StringUtils.isNotBlank(queryParam.getDurationSort())){ if("ASC".equals(queryParam.getDurationSort().toUpperCase())){ sort = new BasicDBObject("$sort", new BasicDBObject( "duration", 1)); }else{ sort = new BasicDBObject("$sort", new BasicDBObject( "duration", -1)); } } //拼接 最大持续时间条件 if(StringUtils.isNotBlank(queryParam.getDurationMaxSort())){ if("ASC".equals(queryParam.getDurationMaxSort().toUpperCase())){ sort = new BasicDBObject("$sort", new BasicDBObject( "durationMax", 1)); }else{ sort = new BasicDBObject("$sort", new BasicDBObject( "durationMax", -1)); } } aggregateList.add(group); if(sort==null){ if("asc".equals(queryParam.getCountSort())){ sort = new BasicDBObject("$sort", new BasicDBObject( "count", 1)); }else{ sort = new BasicDBObject("$sort", new BasicDBObject( "count", -1)); } } aggregateList.add(sort); //aggregateList.add(project); //isPage=false 是 统计总共的条数 if(isPage){ skip = new BasicDBObject("$skip", (queryParam.getPage())*queryParam.getSize()); limit = new BasicDBObject("$limit", queryParam.getSize()); aggregateList.add(skip); aggregateList.add(limit); } return aggregateList; }阅读更多
相关文章推荐
- SQL多条件查询拼接in中条件方法
- SQL多条件查询拼接in中条件方法
- linq 动态拼接查询条件 扩展方法
- mongodb用子文档做为查询条件的两种方法
- Linq 联合查询条件快捷拼接方法
- 易语言的sql操作时的多个查询条件拼接方法
- linq 动态拼接查询条件 扩展方法
- MongoDB学习(3)(条件查询,排序,索引的方法)
- Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解
- C# MongoDB 查询,分组,聚合,排序,条件,分页
- 常用拼接多个查询条件的方法01
- php通过数组实现多条件查询实现方法(字符串分割)
- 在ASP.NET(C#)中查询字符串Like拼接where字段的方法
- 【MongoDB学习笔记15】MongoDB的查询:find查询条件
- MongoDB聚合查询
- 查询条件的拼接
- php通过数组实现多条件查询实现方法(字符串分割)
- java 操作mongodb查询条件的常用设置
- hql多条件查询的拼接
- gethibernatetemplate find条件查询方法