mongoTemplate的GroupOperation分组查询及Criteria条件查询的使用
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())&¶ms.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条件查询的使用相关推荐
- alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)
alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...
- MyBatis关联查询、多条件查询
MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...
- Mybatis基础:增删改查、模糊查询、多条件查询
Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...
- 众筹网站项目第四天之异步请求的分页查询和模糊条件查询(2)
打开原教程视频 注:本人是渣渣,有错请谅解. 异步请求的分页查询和模糊条件查询 同步请求和异步请求的区别在实现登录功能时已经介绍过了,下图便是实现异步请求分页查询的时序图. 可以看出我们首先进行用户列 ...
- ssm框架中利用pagehelper分页,完成模糊查询与select条件查询
ssm框架中利用pagehelper分页,完成模糊查询与select条件查询 一.问题分析 1.1 往期回顾 pagehelper分页 https://blog.csdn.net/Jia_Peng_T ...
- SQL之EXISTS子查询和IF条件查询
不积跬步,无以至千里. " 今天给大家分享的是SQL的EXISTS子查询和IF条件查询语句. EXISTS EXISTS子查询 EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际 ...
- MyBatis分组统计查询、多条件查询
声明一下,本文章基于之前的博客https://blog.csdn.net/Xeon_CC/article/details/107219206 的环境下进行编码,但是不影响童鞋们浏览此文章,毕竟说的是一 ...
- NHibernate——Criteria条件查询
条件查询 NHibernate.ICriteria接口表示特定持久类的一个查询.ISession是 ICriteria实例的工厂. 这里以Northwind数据库为示例数据库 示例数据表:Employ ...
- java mongodb 多表关联查询,多条件查询,分页,排序
前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...
最新文章
- Code Review 是一场苦涩但有意思的修行
- 节省两倍开发时间,Java静态方法还可以这么玩
- CG CTF WEB /x00
- oracle添加文件,ORACLE---添加控制文件
- Android-Universal-Image-Loader 的使用说明
- 企业拥抱开源之前,必须了解的七件事
- 关于util.Date,sql.Date,sql.Time,sql.Timestamp以及他们和Clendar类的区别和联系
- 想要升级Big Sur 了?良心建议看看这个
- 北京大学冬令营(PKUWC2018)总结
- 高斯启发式Gaussian Heuristic 格理论相关知识
- (适配方案总结)客户薅公司两台ipad,我还要给做适配?
- [模板]线性递推+BM
- 什么是前端开发?什么是后端开发?
- 为什么要学习设计模式
- java spark k-means算法
- windows phone真正解决方案:无法启动调试--未安装 Silverlight Developer 运行时。请安装一个匹配版本。
- 计算机组老师颁奖词,奖励优秀学年组、教师颁奖词
- uboot移植之修改支持NandFlash识别篇6(超详细)
- 30天自制操作系统第五天
- 【SaaS - Export项目】18 - 用户登录、注销登录