SpringBoot系列之MongoDB Aggregations用法详解


Posted in MongoDB onFebruary 12, 2022

1、前言

在上一章的学习中,我们知道了Spring Data MongoDB的基本用法,但是对于一些聚合操作,还是不熟悉的,所以本博客介绍一些常用的聚合函数

2、什么是聚合?

MongoDB 中使用聚合(Aggregations)来分析数据并从中获取有意义的信息。在这个过程,一个阶段的输出作为输入传递到下一个阶段

常用的聚合函数

聚合函数 SQL类比 描述
project SELECT 类似于select关键字,筛选出对应字段
match WHERE 类似于sql中的where,进行条件筛选
group GROUP BY 进行group by分组操作
sort ORDER BY 对应字段进行排序
count COUNT 统计计数,类似于sql中的count
limit LIMIT 限制返回的数据,一般用于分页
out SELECT INTO NEW_TABLE 将查询出来的数据,放在另外一个document(Table) , 会在MongoDB数据库生成一个新的表

3、环境搭建

  • 开发环境
  • JDK 1.8
  • SpringBoot2.2.1
  • Maven 3.2+
  • 开发工具
  • IntelliJ IDEA
  • smartGit
  • Navicat15

使用阿里云提供的脚手架快速创建项目:
https://start.aliyun.com/bootstrap.html

SpringBoot系列之MongoDB Aggregations用法详解

也可以在idea里,将这个链接复制到Spring Initializr这里,然后创建项目

SpringBoot系列之MongoDB Aggregations用法详解

jdk选择8的

SpringBoot系列之MongoDB Aggregations用法详解

选择spring data MongoDB

SpringBoot系列之MongoDB Aggregations用法详解

4、数据initialize

private static final String DATABASE = "test";
private static final String COLLECTION = "user";
private static final String USER_JSON = "/userjson.txt";
private static MongoClient mongoClient;
private static MongoDatabase mongoDatabase;
private static MongoCollection<Document> collection;

@BeforeClass
public static void init() throws IOException {
    mongoClient = new MongoClient("192.168.0.61", 27017);
    mongoDatabase = mongoClient.getDatabase(DATABASE);
    collection = mongoDatabase.getCollection(COLLECTION);
    collection.drop();
    InputStream inputStream = MongodbAggregationTests.class.getResourceAsStream(USER_JSON);
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    reader.lines()
            .forEach(l->collection.insertOne(Document.parse(l)));
    reader.close();
}

5、例子应用

本博客,不每一个函数都介绍,通过一些聚合函数配置使用的例子,加深读者的理解

统计用户名为User1的用户数量

@Test
 public void matchCountTest() {
     Document first = collection.aggregate(
             Arrays.asList(match(Filters.eq("name", "User1")), count()))
             .first();
     log.info("count:{}" , first.get("count"));
     assertEquals(1 , first.get("count"));
 }

skip跳过记录,只查看后面5条记录

@Test
 public void skipTest() {
      AggregateIterable<Document> iterable = collection.aggregate(Arrays.asList(skip(5)));
      for (Document next : iterable) {
          log.info("user:{}" ,next);
      }

  }

对用户名进行分组,避免重复,group第一个参数$name类似于group by name,调用Accumulatorssum函数,其实类似于SQL,SELECT name ,sum(1) as sumnum FROMusergroup by name

@Test
 public void groupTest() {
     AggregateIterable<Document> iterable = collection.aggregate(Arrays.asList(
             group("$name" , Accumulators.sum("sumnum" , 1)),
             sort(Sorts.ascending("_id"))
             ));
     for (Document next : iterable) {
         log.info("user:{}" ,next);
     }

 }

参考资料

MongoDB 聚合 https://www.runoob.com/

MongoDB Aggregations Using Java

到此这篇关于SpringBoot系列之MongoDB Aggregations用法的文章就介绍到这了,更多相关SpringBoot MongoDB Aggregations用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MongoDB 相关文章推荐
MongoDB数据库的安装步骤
Jun 18 MongoDB
MongoDB 常用的crud操作语句
Jun 20 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
mongoDB数据库索引快速入门指南
Mar 23 MongoDB
MongoDB支持的数据类型
Apr 11 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 MongoDB
MongoDB连接数据库并创建数据等使用方法
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
Nov 01 #MongoDB
centos8安装MongoDB的详细过程
关于CentOS 8 搭建MongoDB4.4分片集群的问题
MongoDB日志切割的三种方式总结
Sep 15 #MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 #MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 #MongoDB
You might like
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
PHP反射实际应用示例
2019/04/03 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
关于js datetime的那点事
2011/11/15 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解Python编程中基本的数学计算使用
2016/02/04 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
python 等差数列末项计算方式
2020/05/03 Python
Pycharm Git 设置方法
2020/09/15 Python
python爬取天气数据的实例详解
2020/11/20 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
2014年感恩节活动策划方案
2014/10/06 职场文书
运动会广播稿300字
2015/08/19 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android