[数据库]MongoTemplate之分组分页复合条件查询
来源:互联网 发布:eve数据地点 编辑:程序博客网 时间:2024/05/16 12:36
mongodbsql 文档地址: https://docs.mongodb.com/manual/reference/operator/update/
废话不多说,直接上代码
情景一:分组查询
public Page<CourseDetail> listCourseDetails(QueryCourseDetailModel queryModel) { //条件一 where gradeId in (集合) and mark=true Criteria criteria = Criteria.where("gradeId").in(gradeIds).and("mark").is(true); if (null != status && status.size() > 0) { Criteria criteriaChild = new Criteria(); //条件二 criteriaChild 条件查询 ( teacherCommentStatus = XX or parentsReplyTeacherStatus =XX ) criteriaChild.orOperator(Criteria.where("teacherCommentStatus").in(status), Criteria.where("parentsReplyTeacherStatus").is(replayStatus)); } //拼接最后语句 where gradeId in (集合) and mark=true and ( teacherCommentStatus = XX or parentsReplyTeacherStatus =XX ) criteria.andOperator(criteriaChild); //分组条件 GroupBy groupBy = new GroupBy("gradeId") .initialDocument("{ count: 0 }") .reduceFunction("function (doc,pre){pre.count +=1 ;}"); //使用 mongoTemplate.group 分组查询 GroupByResults groupByResults = mongoTemplate. group(criteria, "homework", groupBy, Homework.class); //获取结果 BasicDBList list = (BasicDBList) groupByResults.getRawResults().get("retval"); list.stream().map(map -> { BasicDBObject obj = (BasicDBObject) map; ...... return obj; }).collect(Collectors.toList()); return list; }
情景二: 分页查询
public Page<CourseDetail> listCourseDetails(QueryCourseDetailModel queryModel) { //创建排序模板Sort Sort sort = new Sort(Sort.Direction.DESC, "creationDate"); //创建分页模板Pageable Pageable pageable = new PageRequest(queryModel.getPageStart(), queryModel.getPageSize(), sort); //创建查询条件对象 Query query = new Query(); //条件gradeId =XX Criteria criteria = Criteria.where("gradeId").is(queryModel.getGradeId()); //条件 and time > XX if (!StringUtil.isEmpty(queryModel.getStartCourseTime())) { criteria.and("time").gt(queryModel.getStartCourseTime()); } //条件 and time < XX if(! StringUtil.isEmpty(queryModel.getEndCourseTime())){ criteria.and("time").lt(queryModel.getEndCourseTime()); query.addCriteria(criteria); //mongoTemplate.count计算总数 long total = mongoTemplate.count(query, CourseDetail.class); // mongoTemplate.find 查询结果集 List<CourseDetail> items = mongoTemplate.find(query.with(pageable), CourseDetail.class); items.forEach(courseDetail -> { courseDetail.setTeacherUnReplaySize(homeworkRepository.countByGradeIdAndParentsReplyTeacherStatusAndCourseStartTimeAndMarkTrue(courseDetail.getGradeId(), PARENTS_REPLY_TEACHER_STATUS.UNANSWERED, courseDetail.getCourseStartTime().getTime())); }); return new PageImpl(items, pageable, total); }
阅读全文
1 0
- [数据库]MongoTemplate之分组分页复合条件查询
- mongoTemplate实现多条件查询
- 数据库之条件查询
- thinkphp 复合条件查询
- mongoTemplate通过Query条件指定查询条件和返回字段
- 多条件查询 分组 分页的sql语句
- C# MongoDB 查询,分组,聚合,排序,条件,分页
- C# MongoDB 查询,分组,聚合,排序,条件,分页
- C# MongoDB 查询,分组,聚合,排序,条件,分页
- MongoTemplate针对多条件查询以及复杂查询基本示例
- java操作mongdb多条件复合查询(包括模糊查询和按时间段查询),分页
- Java操作Hbase增删改查(附带复合条件查询以及分页查询)
- 分页&条件查询分页
- 91---Criteria的内链接,分页,查询唯一对象,条件查询,分组统计,投影查询,DetachedCriteria
- MySQL复合条件连接查询
- TP框架复合查询条件
- Lucene代码备份之分页条件查询
- servicestace.orm lamda查询之分组条件 例
- scala/java 可变长度参数
- 逻辑回归迭代公式推导
- 软件工程数据词典
- Linux LVM快照功能
- 1.正则表单验证2.全局变量作为形参传入函数内部操作之后,变量的值在全局上不发生改变的解决方法
- [数据库]MongoTemplate之分组分页复合条件查询
- XMC4300 ethercat slave
- C++一些细节问题记录
- json中取值前先判断是否有当前key
- 【问题】VS2010 VS2012 VS2013 安装之后提示 "无法打开文件 kernel32.lib" 解决方案
- 机器学习week1-Introduction
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- 在Android(AS)中调用unity场景(view)
- HttpUrlConnection的get请求方式