Aggregation 实现常见操作 MongoDB

1.聚合管道实现简单的条件,排序数据查询功能。

注意点:执行 顺序可以完全参考mysql的书写顺序。

mysql是先where语句,然后排序,然后limit。

mongodb一样。也是必须先是条件语句,然后limit和sort。条件语句必须放到第一位,不然查询的可能为空。然后就是limit,sort谁在前的含义是不一样的。是先截取数据,对截取的数据排序还是先排序,在截取数据。这个也要考虑好了。正常是先排序,在截取数据。

注意点:查询结果用实体类封装。最好不用Map ,withOptions()用来解除mongodb 查询数据默认占用最大内存的(默认100M).

2.聚合管道实现分组统计功能

Aggregation.group() : 聚合函数,将某个字段或者某个数组作为分组统计的依据。单独的分组实际上没啥用,一般都是分组后接着做些具体的分组统计操作。

分组查询的结果一般需要起别名,意味着字段不在查询封装的实体中,可以使用Map来接受值

查询顺序是match,group,limit。

3.Aggregation常用函数

##2.1 Aggregation.group() : 聚合函数,将某个字段或者某个数组作为分组统计的依据,在group的基础上又扩展出以下函数:

2.1.1:sum() : 求和

2.1.2:max() : 获取最大值

2.1.3:min() : 获取最小值

2.1.4:avg() : 获取平均值

2.1.5:count() : 统计条目数

2.1.6: first () : 获取group by 后的某个字段的首个值

2.1.7:last() : 获取 group by 后的某个字段的最后一个值

##2.2 Aggregation.match() : 过滤函数,主要存储过滤数据的条件,输出符合条件的记录

##2.3 Aggregation.project(): 修改数据结构函数,将前面管道中的获取的字段进行重名,增加,修改字段等操作。

##2.4 Aggregation.sort(): 排序函数,将上级管道的内容按照某个字段进行排序并且输出。

##2.5 Aggregation.limit(): 限制输出函数,将聚合返回的内容限定在某个条目之内。

##2.6 Aggregation.skip(): 跳过指定数量的条目再开始返回数据的函数,通常和sort(),limit()配合,实现数据翻页查询等操作。

3.Aggregation.group("mp_id").first("mp_id").as("mpId").count().as("total")进行group,并且第一列mp_id起别名为mpId,count计数列起别名为total

4.Aggregation.addFields().addFieldWithValue("type", "day_air").build()) 添加自定义字段

5.AggregationResults out = mongoTemplate.aggregate(aggregation, "day_air", TempMpId.class); 参数1为聚合配置,参数2为查询那个文档,参数3为接收的实体类

6.List tempMpIdList = new ArrayList<>(); for (Iterator iterator = out.iterator(); iterator.hasNext(); ) { tempMpIdList.add(iterator.next()); } 循环取出返回值

表达式操作符

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值