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 常用的crud操作语句
Jun 20 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 MongoDB
MongoDB支持的索引类型
Apr 11 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
抓取YAHOO股票报价的类
2009/05/15 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
input 高级限制级用法
2009/03/26 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python list与NumPy array 区分详解
2019/11/06 Python
python logging添加filter教程
2019/12/24 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
应届生会计求职信
2013/11/11 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
空气环保标语
2014/06/12 职场文书
2014年电厂工作总结
2014/12/04 职场文书
中班上学期个人总结
2015/02/12 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
预备党员党支部意见
2015/06/02 职场文书
教师节祝酒词
2015/08/11 职场文书
培训心得体会怎么写
2016/01/25 职场文书