欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot系列之MongoDB Aggregations用法详解

程序员文章站 2022-06-15 13:55:25
目录1、前言2、什么是聚合?3、环境搭建4、数据initialize5、例子应用参考资料1、前言在的学习中,我们知道了spring data mongodb的基本用法,但是对于一些聚合操作,还是不熟悉...

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用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!