本文主要是介绍springData 实现mongodb 分组(group)操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
废话不多说 直接上代码吧
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中可以获取查询返回结果总数。
这篇关于springData 实现mongodb 分组(group)操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!