mongoTemplate的GroupOperation分组查询及Criteria条件查询的使用
GroupOperation:

//此处类似于SQL中的groupBy,group("")参数可以是String,也可以是String数组String[] groupKeys = new String[4];GroupOperation groupOp = null;if (1==1)) { // 模拟条件groupKeys[0] = "";groupKeys[1] = "";groupKeys[2] = "";groupKeys[3] = "";groupOp = Aggregation.group(groupKeys);} else {groupOp = Aggregation.group("", "","");}//构建查询条件Criteria criteria = nullList<String> gcIds = new ArrayList<>();//gcIds.add("firstId1,secondId1,thirdId1");gcIds.add("firstId2,secondId2");gcIds.add("firstId3");//构建一个总的criteria对象 Criteria criteria = new Criteria();Criteria criteriaTime = new Criteria().andOperator(Criteria.where("createDate").gte(beginTime),//createDate为Mongo中的时间,在查询时间区间时,需要用到此方式Criteria.where("createDate").lt(theEndTime));Criteria criteriaBrand = new Criteria();Criteria criteriaSupplier = new Criteria();Criteria criteriaGcId = new Criteria();Criteria criteriaGoodsName = new Criteria();Criteria criteriaPriceType = new Criteria();//params中储存前台出来的查询条件if (params.getBrandId() != null && params.getBrandId().size() > 0) {criteriaBrand = criteriaBrand.and("brandId").in(params.getBrandId());}if (params.getSupplierId() != null && params.getSupplierId().size() > 0) {criteriaSupplier = criteriaSupplier.and("supplierId").in(params.getSupplierId());}if (!"".equals(params.getGoodsName())&&params.getGoodsName() != null) {criteriaGoodsName = criteriaGoodsName.and("goodsName").regex(".*?" +params.getGoodsName()+ ".*");}if (params.getUnitPriceType() != null && params.getUnitPriceType().size()>0) {criteriaPriceType = criteriaPriceType.and("unitPriceType").in(params.getUnitPriceType());}//这里相当于 where brandId = 1  and ((firstGcId = 1 and secondGcId = 2 and thirdGcId = 3 )or (firstGcId = 4 and secondGcId = 5) or (firstGcId = 6))if (gcIds != null && gcIds.size() > 0) {Criteria[] orCriteria = new Criteria[gcIds.size()];for (int i = 0; i < gcIds.size(); i++) {String[] split = gcIds.get(i).split(",");if (split.length == 3) {orCriteria[i] = Criteria.where("firstGcId").is(Long.parseLong(split[i])).and("secondGcId").is(Long.parseLong(split[i + 1])).and("thirdGcId").is(Long.parseLong(split[i + 2]));}if (split.length == 2) {orCriteria[i] = Criteria.where("firstGcId").is(Long.parseLong(split[i])).and("secondGcId").is(Long.parseLong(split[i + 1]));}if (split.length == 1) {orCriteria[i] = Criteria.where("firstGcId").is(Long.parseLong(split[i]));}}criteriaGcId.orOperator(orCriteria);}criteria.andOperator(criteriaTime, criteriaBrand, criteriaSupplier, criteriaGcId,criteriaGoodsName,criteriaPriceType);

注意,一个Criteria对象中,最多只有一个andOperator条件和一个orOperator条件,并且不能为空,所以要用criteria对象将criteriaTime, criteriaBrand, criteriaSupplier, criteriaGcId,criteriaGoodsName,criteriaPriceType这几个对象用and(or)连接

//构建Aggregation对象,groupOp.sum("mongo中要聚合的字段").as("接收的实体类中的属性")
Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),Aggregation.sort(Sort.Direction.ASC, "createDate"),groupOp.sum("mongo中要聚合的字段").as("接收的实体类中的属性").sum("totalPurchaseAmount").as("totalPurchaseAmount").last("createDate").as("createDate"),Aggregation.sort(Sort.Direction.ASC, "createDate"),//排序条件Aggregation.skip((currentPage-1) *pageSize * 1L),//分页条件,currentPage当前页Aggregation.limit(pageSize),//pageSize每页记录数//project中字段要与.as()中的字段一一对应Aggregation.project("接收的实体类中的属性","totalPurchaseAmount","createDate"));//获取到所查询的集合AggregationResults<GoodsIndentListEntity> aggregateData = mongoTemplate.aggregate(aggregation, GoodsIndentListEntity.class, GoodsIndentListEntity.class);List<GoodsIndentListEntity> data = aggregateData.getMappedResults();

mongoTemplate的GroupOperation分组查询及Criteria条件查询的使用相关推荐

  1. alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)

    alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...

  2. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  3. Mybatis基础:增删改查、模糊查询、多条件查询

    Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...

  4. 众筹网站项目第四天之异步请求的分页查询和模糊条件查询(2)

    打开原教程视频 注:本人是渣渣,有错请谅解. 异步请求的分页查询和模糊条件查询 同步请求和异步请求的区别在实现登录功能时已经介绍过了,下图便是实现异步请求分页查询的时序图. 可以看出我们首先进行用户列 ...

  5. ssm框架中利用pagehelper分页,完成模糊查询与select条件查询

    ssm框架中利用pagehelper分页,完成模糊查询与select条件查询 一.问题分析 1.1 往期回顾 pagehelper分页 https://blog.csdn.net/Jia_Peng_T ...

  6. SQL之EXISTS子查询和IF条件查询

    不积跬步,无以至千里. " 今天给大家分享的是SQL的EXISTS子查询和IF条件查询语句. EXISTS EXISTS子查询 EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际 ...

  7. MyBatis分组统计查询、多条件查询

    声明一下,本文章基于之前的博客https://blog.csdn.net/Xeon_CC/article/details/107219206 的环境下进行编码,但是不影响童鞋们浏览此文章,毕竟说的是一 ...

  8. NHibernate——Criteria条件查询

    条件查询 NHibernate.ICriteria接口表示特定持久类的一个查询.ISession是 ICriteria实例的工厂. 这里以Northwind数据库为示例数据库 示例数据表:Employ ...

  9. java mongodb 多表关联查询,多条件查询,分页,排序

    前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...

最新文章

  1. Code Review 是一场苦涩但有意思的修行
  2. 节省两倍开发时间,Java静态方法还可以这么玩
  3. CG CTF WEB /x00
  4. oracle添加文件,ORACLE---添加控制文件
  5. Android-Universal-Image-Loader 的使用说明
  6. 企业拥抱开源之前,必须了解的七件事
  7. 关于util.Date,sql.Date,sql.Time,sql.Timestamp以及他们和Clendar类的区别和联系
  8. 想要升级Big Sur 了?良心建议看看这个
  9. 北京大学冬令营(PKUWC2018)总结
  10. 高斯启发式Gaussian Heuristic 格理论相关知识
  11. (适配方案总结)客户薅公司两台ipad,我还要给做适配?
  12. [模板]线性递推+BM
  13. 什么是前端开发?什么是后端开发?
  14. 为什么要学习设计模式
  15. java spark k-means算法
  16. windows phone真正解决方案:无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本。
  17. 计算机组老师颁奖词,奖励优秀学年组、教师颁奖词
  18. uboot移植之修改支持NandFlash识别篇6(超详细)
  19. 30天自制操作系统第五天
  20. 【SaaS - Export项目】18 - 用户登录、注销登录

热门文章

  1. linux支持什么照片格式,linux转换照片格式
  2. 简单使用scrapy框架下载漫画
  3. 多线程使用不当导致的 OOM
  4. 东师《水彩画技法》离线作业网考
  5. 计算机相对地址与绝对地址,什么是相对地址和绝对地址
  6. Win10 开启开发者模式的几种方法
  7. 我爱吃蜂密,今天新情不错
  8. 码率含义以及计算大小
  9. [附源码]计算机毕业设计企业人事管理系统Springboot程序
  10. 英雄联盟总结之客户端综述3(笔记分享)