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. SAP QM Quality Notification的凭证流
  2. mvn deploy 推送到私有仓库,注意当前日期
  3. AutoScaling 与函数计算结合,赋予更丰富的弹性能力
  4. awt jtable 多线程加载图片_Java项目实战之天天酷跑(三):缓冲加载游戏界面
  5. 项目开发--高级功能汇总
  6. 搭建微服务_快速搭建 SpringCloud 微服务开发环境的脚手架
  7. Java中判断当前数据是否全为数字
  8. anaconda虚拟环境python升级_使用Anaconda虚拟环境管理Python版本
  9. 环信即时通讯在工程中的安装——Nusen_Liu
  10. curlopt_ssl_verifypeer后https还是验证不过_为什么 HTTPS 需要 7 次握手和 9 倍时延
  11. 系统功能测试用例模板
  12. 利用Powergui进行FFT Analysis,信号源为空解决方法
  13. Word编号设置和跳到尾页快捷键
  14. 本周最新文献速递20220327
  15. 订单导出(1688)
  16. 必看:重装操作系统的20条原则
  17. 基于深度学习的显著性目标检测方法综述
  18. 体验过智慧家居后,我再也不想回家了……
  19. 知网、维普、万方文献一网打尽免费下载,亲测好用哦!
  20. 倍福--威伦触摸屏通信IP设置

热门文章

  1. 当使用jlink调试单片机出现**JLink Warning: T-bit of XPSR is 0 but should be 1. Changed to 1
  2. AlertDialog和ProgressDialog
  3. 【mysql安装报错】the cabinet file media 1.cab“ required for this installation is corrupt and cannot be use
  4. CSS3 background-clip背景裁剪、CSS3 background-origin背景图片起点
  5. Mysql上下级结构表设计
  6. 动态规划-b站up主正月点灯笼DP教程代码python+java版
  7. 3.5mm 耳机插座 5脚
  8. 全球百大流量网站排行榜出炉啦!谷歌排在首位,百度竟然排第四!
  9. 测试技能整理-UI自动化测试
  10. 山西建筑安全员B证怎么考单选题库