springData 实现mongodb 分组(group)操作

本文介绍了一种使用Spring Data MongoDB进行高效聚合查询的方法。通过示例代码,详细展示了如何实现跳过部分记录、限制返回数量、按特定字段分组、自定义返回字段别名以及指定排序方式等功能。此方法适用于需要从大量数据中筛选并获取特定字段信息的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不多说 直接上代码吧

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
        TypedAggregation<MongoQuotesNewsBean> agg = Aggregation.newAggregation(MongoQuotesNewsBean.class,
                Aggregation.skip(start),
                Aggregation.limit(end),
                Aggregation.group("stockId").first("stockId").as("stockIdFirst").first("pubTime").as("pubTime"),
                Aggregation.sort(new Sort(Sort.Direction.DESC, "pubTime")),
                Aggregation.project("stockIdFirst")
        );
        AggregationResults<Map> aggregationResults = mongoTemplate.aggregate(agg, "quotes_news", Map.class);
        List<Map> stockIdMapList = aggregationResults.getMappedResults();

前提概要:

  1.MongoQuotesNewsBean 是MongoDB 存储的实体类 

  2. "stockId"是待查询mongo实体类的属性

  3."stockIdFirst"是自定义的返回值别名 可以在查询结果中取得。

执行顺序由上到下,如上代码会先执行

  1.按【pubTime】也是就发布时间倒叙。

  2.指定操作数据的范围

  3.按【stockId】分组查询 并获取分组后 各个分组第一条记录中的 【stockId】字段 重命名为 【stockIdFirst】 

  4.返回指定字段 上面返回的就是 分组后查出的 【stockIdFirst】

注意:group("分组字段").first("结果需要返回的字段)

          要在group后使用排序,那么排序字段需要用first返回,否则会报错

java.lang.IllegalArgumentException: Invalid reference 'pubTime'!

执行结果如下图所示:

聚合查询结果解析:

  1.分组的查询结果通过mappedResults获取 返回的是一个只读的List,通过上面的结果可以看到 上面的查询返回了我需要的stockIdFirst和实体类主键id。

  2.rawResults中可以获取查询返回结果总数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值