SpringBoot集成spring-data-mongodb 技术点记录 --分组分页查询

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: SpringBoot集成spring-data-mongodb 技术点记录 --分组分页查询

spring-data-mongodb --分组分页查询

在项目实际应用中记录mongodb分组分页查询操作

注意:

  1. MongoDB默认时间是utc时间,返回前端的数据需要做处理
  2. 如果查询条件有时间区间的话,不需要做转换,MongoDB会自动转为utc时间处理

代码:

// 根据条件查询Criteriacriteria=Criteria.where("taskId").exists(true);
if (failTaskQueryVo.getChannelName() !=null&&!"".equals(failTaskQueryVo.getChannelName())) {
criteria.and("channelType").is(failTaskQueryVo.getChannelName());
        }
// 时间(这里必须开始时间跟结束时间写一起,否则会报错)if (failTaskQueryVo.getPushStartTime() !=null&&!"".equals(failTaskQueryVo.getPushStartTime()) 
&&failTaskQueryVo.getPushEndTime() !=null&&!"".equals(failTaskQueryVo.getPushEndTime())) {
criteria.and("createTime").gt(failTaskQueryVo.getPushStartTime()).lt(failTaskQueryVo.getPushEndTime());
        }
Aggregationagg=Aggregation.newAggregation(
// 条件Aggregation.match(criteria),
// 分组字段以及其他分组后要展示的字段Aggregation.group("taskId").count().as("failCount")
                .last("channelType").as("channelType")
                .last("createTime").as("createTime")
                .last("message.msgTitle").as("msgTitle")
                .last("message.msgSummary").as("msgSummary")
                .last("message.msgContent").as("msgContent")
                .last("message.sendGroupType").as("sendGroupType"),
// 分页  Aggregation.skip(failTaskQueryVo.getPageNum() >1? (failTaskQueryVo.getPageNum() -1) *failTaskQueryVo.getPageSize() : 0L),  
Aggregation.limit(failTaskQueryVo.getPageSize()),
// 最终要展示的字段Aggregation                        .project("failCount", "channelType", "createTime", "msgTitle", "msgSummary", "msgContent",
"sendGroupType")
// 重命名taskId                        .andExclude("_id").and("_id").as("taskId")
// 格式化时间                        .andExpression("{$dateToString:{format:'%Y-%m-%d %H:%M:%S',date:'$createTime',timezone: 'Asia/Shanghai'}}")
                        .as("createTime"));
AggregationResults<Map>results=mongoTemplate.aggregate(agg, "msgTaskUserFailCollection", Map.class);
List<Map>failMsgList=newArrayList<>();
SimpleDateFormatsdf=newSimpleDateFormat("yyy-MM-dd HH:mm:ss");
for (Mapmap : results) {
// 返回前端处理时间Datedate= (Date) map.get("createTime");
map.put("createTime", sdf.format(date));
failMsgList.add(map);
        }


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
13天前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
5天前
|
NoSQL 关系型数据库 MySQL
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
15 2
|
5天前
|
安全 Java 数据安全/隐私保护
基于SpringBoot+Spring Security+Jpa的校园图书管理系统
本文介绍了一个基于SpringBoot、Spring Security和JPA开发的校园图书管理系统,包括系统的核心控制器`LoginController`的代码实现,该控制器处理用户登录、注销、密码更新、角色管理等功能,并提供了系统初始化测试数据的方法。
10 0
基于SpringBoot+Spring Security+Jpa的校园图书管理系统
|
7天前
|
安全 Java 数据库
|
7天前
|
JSON 安全 Java
|
9天前
|
人工智能 安全 搜索推荐
智能家居技术的未来:集成与创新
随着物联网技术的飞速发展,智能家居系统正在经历一场革命。本文将探讨未来智能家居技术的发展方向,包括更高层次的设备集成、用户交互体验的革新、数据安全的重要性以及人工智能在智能家居中的应用前景。通过分析当前的技术趋势和市场需求,我们预见到一个更加智能、互联和自动化的家庭环境即将到来。
22 1
|
14天前
|
消息中间件 安全 Java
Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
【8月更文挑战第4天】本文详解Spring Boot结合SCRAM认证集成Kafka的过程。SCRAM为Kafka提供安全身份验证。首先确认Kafka服务已启用SCRAM,并准备认证凭据。接着,在`pom.xml`添加`spring-kafka`依赖,并在`application.properties`中配置Kafka属性,包括SASL_SSL协议与SCRAM-SHA-256机制。创建生产者与消费者类以实现消息的发送与接收功能。最后,通过实际消息传递测试集成效果与认证机制的有效性。
|
15天前
|
人工智能 Java API
JeecgBoot 低代码平台快速集成 Spring AI
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Jeecg Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动,包含 RAG 功能。
52 3
|
19天前
|
XML Java 数据库连接
Spring Boot集成MyBatis
主要系统的讲解了 Spring Boot 集成 MyBatis 的过程,分为基于 xml 形式和基于注解的形式来讲解,通过实际配置手把手讲解了 Spring Boot 中 MyBatis 的使用方式,并针对注解方式,讲解了常见的问题已经解决方式,有很强的实战意义。在实际项目中,建议根据实际情况来确定使用哪种方式,一般 xml 和注解都在用。
|
18天前
|
自然语言处理 安全 Java
Spring Boot中集成Lucence
本节课首先详细的分析了全文检索的理论规则,然后结合 Lucene,系统的讲述了在 Spring Boot 的集成步骤,首先快速带领大家从直观上感受 Lucene 如何建立索引已经如果检索,其次通过中文检索的具体实例,展示了 Lucene 在全文检索中的广泛应用。Lucene 不难,主要就是步骤比较多,代码不用死记硬背,拿到项目中根据实际情况做对应的修改即可。