SpringBoot集成spring-data-mongodb 技术点记录 --分组分页查询-阿里云开发者社区

开发者社区> kyo_yang> 正文

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

简介: SpringBoot集成spring-data-mongodb 技术点记录 --分组分页查询
+关注继续查看

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

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

注意:

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

代码:

        // 根据条件查询
        Criteria criteria = 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());
        }
    
        Aggregation agg = 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 = new ArrayList<>();
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        
        for (Map map : results) {
            // 返回前端处理时间
            Date date = (Date) map.get("createTime");
            map.put("createTime", sdf.format(date));
            failMsgList.add(map);
        }


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot-18-之AOP+log4j 记录访问请求信息
org.springframework.boot spring-boot-starter-aop log4j log4j 1.
1054 0
【开源】QuickPager ASP.NET2.0分页控件V2.0.0.7 增加了一个js函数的分页方式。
     昨天在csdn上看到一个人提出来了一种分页的需求,大致是分页控件只负责绘制总页数、上一页、下一页等信息,然后在用户翻页的时候可以触发一个js函数,然后自己实现这个js函数。并不需要提交表单,他想用ajax的方式来获取数据,但是又不想使用微软的ajax。
756 0
跨库查询(OpenDataSource)与链接服务器(Linking Server)
一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you only need to access the remote server's data once...
674 0
Spring Boot采坑记录
springboot问题 前端thymeleaf,使用jar包模式运行后找不到页面 解决方法: 代码中所有直接返回String进行页面跳转的改为使用ModelAndView 集成shiro之后自定义Realm中注入的service事务,缓存失效 解决方法:在注入的service上增加@Lazy注.
1261 0
QuickPager asp.net 分页控件、表单控件等自定义控件下载 和介绍 【2009.09.07更新】
  最新下载地址: 自然框架的源代码、Demo、数据库、配置信息管理程序下载(2010.01.25更新)     QuickControl web控件集包含的控件 QuickControl web控件集——基本控件: 控件名称 说明 详细介绍 MyTextBox ...
949 0
Struts2获取easyUI datagrid 分页参数page和rows
Struts2获取easyUI datagrid 分页参数page和rows   用pageHelper分页时,只要是能够获取前台传来的两个参数page和rows基本就完成了很大一部分。 获取方法:定义两个变量page和rows,设置对应的getter,setter方法,在方法中直接获取就能打得。
1133 0
MySql分页查询慢|这里告诉你答案
背景 我们在开发的过程中使用分页是不可避免的,通常情况下我们的做法是使用limit加偏移量:select * from table where column=xxx order by xxx limit 1,20。
2889 0
Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析
这几天由于工作需要,研究了一下远程打印日志的方式,于是将研究结果记录在此,分享给大家,希望对大家有所帮助。
1423 0
+关注
7
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载