Spring集成MongoTemplate复杂查询

本文介绍了如何使用Spring集成MongoTemplate进行复杂查询,包括基于时间段和ID的查询,以及通过name字段进行分组统计的方法。

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

最近,做项目用到了mongodb数据库,在后台代码里面通过Spring集成MongoTemplate模板进行查询。
有时候常用的查询,已经不满足业务的需求,那么我们就通过聚合来进行查询。

//代码1:查询某个时间段内,并且id = 3的所有数据
//创建聚合查询模板 begin:开始时间 end:结束时间
Aggregation aggregation = aggregation = Aggregation.newAggregation(              Aggregation.match(Criteria.where("datetime").gt(begin).lte(end).andOperator(Criteria.where("id").is(3)))
);
//聚合查询的结果集 StatisticsReport 是mongo表对应的实体类
AggregationResults<StatisticsReport> results = mongoTemplate.aggregate(aggregation, "你的monoddb的表名",StatisticsReport.class);
//获取最终结果
List<StatisticsReport> list = results.getMappedResults();
//代码2:分组查询 按name分组,str是个数组说明能进行多条件分组
//例如:按name,age分组,String str []  ={"name","age"}; 
String str [] = {"name"}; 
Fields groupFields = Fields.fields(str );
//创建分组条件 
GroupOperation groupOperation = new GroupOperation(groupFields ).count().as("name").last("name").as("name").count().as("datetime").last("datetime").as("datetime").sum("click").as(click).sum("cost").as("cost");

/*count().as("name").last("name").as("name")是分组后,显示的name结果,datetime同理,sum("click").as(click)是求出click的总数,并显示click累加结果,cost同理*/
//和代码1的集成起来  查询某个时间段内,并且id = 3,然后通过name分组,最后通过datetime排序(可有可无)
Aggregation aggregation = aggregation = Aggregation.newAggregation(              Aggregation.match(Criteria.where("datetime").gt(begin).lte(end).andOperator(Criteria.where("id").is(3))),
groupOperation,
new SortOperation(new Sort(Sort.Direction.ASC, "datetime"));

AggregationResults<StatisticsReport> results = mongoTemplate.aggregate(aggregation, "你的monoddb的表名",StatisticsReport.class);
List<StatisticsReport> list = results.getMappedResults();

以上,查询基本满足了复杂的统计查询。至于模糊查询和分页就不细说了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值