SpringBoot集成MongoDB(2)|(中级-数据统计、集合、管道处理)

SpringBoot集成MongoDB(2)|(中级-数据统计、集合、管道处理)


前言

本章节主要介绍SpringBoot项目集成MongoDB的一些聚合统计相关知识,包括集成版本、依赖、集成方式、以及多管道使用。前提需要对Springboot项目、对MongoDB有一定的了解。

一、MongoDB是什么?

mongodb和redis一样是一种NoSQL存储介质,存储读取快,但实质上它又是一种介于关系型数据库(如mysql,数据存在磁盘中)和非关系型数据库(如redis,数据存在内存中)的介质,它数据存在磁盘,但读取又借助内存机制映射进行,所以集成了关系型和非关系型的各自优点。它的设计是基于分布式储存的,可用集群部署来分压

二、集成步骤

1.依赖引入

pom依赖如下,主要列出SpringBoot依赖版本以及MongoDB版本,其他需要依赖自行添加

    <!-- Springboot 版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.7</version>
        <relativePath/>
    </parent>
    
     <!-- mongodb 依赖 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-mongodb</artifactId>
     </dependency>

2.文件配置

yml配置,此处为单机配置,集群模式uri

spring:
  data:
    mongodb:
      uri: mongodb://用户名:密码@127,。0.0.1:port/库名?authSource=admin&authMechanism=SCRAM-SHA-1

3.聚合管道(Aggregation Pipeline)

通过mongoTemplate对象对mongoDb数据库进行聚合操作,使用聚合管道可对集合中的文档进行变换和组合。应用场景:表关联查询、数据的统计

下面引用官网对管道用法的描述插图,可以看出管道操作类似于对数据的层层处理,就像自来水厂,将原始水池的水通过水管连接到不同的处理池,每个处理池都会接收上层水池的水,处理后流往下层的水池,最终达到水的净化目的。
官网描述图
Aggregation.match():构建查询条件管道
Aggregation.lookup():构建关联查询管道
Aggregation.unwind():构建聚合管道
Aggregation.group():构建分组统计管道
Aggregation.sort():构建排序管道
Aggregation.skip():跳过查询结果前xx条
Aggregation.limit():获取查询结构xx条


4.服务层代码

通过mongoTemplate对象对mongoDb数据库进行操作,mongoTemplate有springboot容器创建管理,用户不需要进行配置,使用的时候注入即可,controller层没有贴入,可自行编写。

 public IPage<DemoDto> count(Query param, int pageNo, int pageSize) {
        pageNo = Math.max(pageNo, 1);

        //构建查询管道
        AggregationOperation statsMatchOp = buildQAStatsMatchOp(param);
        //构建联表查询管道
        AggregationOperation lookupOp = Aggregation.lookup("#{关联表名}", "#{关联字段}", "#{关联表字段}", "#{关联表取值}");
        //聚合管道,关联的字段聚合起来
        AggregationOperation unwindOp = Aggregation.unwind("#{关联表取值}");
        //统计管道
        AggregationOperation groupOp = Aggregation.group("dept")
                .first("name").as("name")
                .first("type").as("type")
                .sum("count").as("count");
        //构造分页的聚合查询
        Aggregation pagedAgg = newAggregation(statsMatchOp,
                lookupOp,
                unwindOp,
                groupOp,
                Aggregation.sort(Sort.by(Sort.Direction.ASC, "count"),  //用于排序
                Aggregation.skip((long) (pageNo - 1) * pageSize),  //跳过前多少条数据
                Aggregation.limit(pageSize)); //获取多少条数据
        List<DemoDto> demoDtos = mongoTemplate.aggregate(pagedAgg, "demo", DemoDto.class)
                .getMappedResults();
        return PageUtil.page(totalSize, pageNo, pageSize);
    }
    MatchOperation buildQAStatsMatchOp(Query param) {
        Criteria criteria = new Criteria().and("date").is(date);
        return Aggregation.match(criteria);
    }

总结

以上就是SpringBoot集成MongoDb数据库内容实现管道聚合操作。该过程主要安装管道定义顺序依次完成数据的筛选处理。需要源代码的可以留言获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值