Spring Data MongoDB 1.9.3中@Aggregation注解导入失败求助
问题处理方案
原因说明
org.springframework.data.mongodb.repository.Aggregation注解是Spring Data MongoDB 2.0版本及以上才引入的特性,而你使用的1.9.3.RELEASE属于早期版本(对应Spring Data Kay SR3),该版本根本不存在这个注解,因此无法导入。
替代实现方案(适配1.9.3.RELEASE)
由于必须使用1.9.3版本,你可以通过以下两种原生支持的方式实现聚合查询:
方案1:使用MongoTemplate手动构建聚合管道
直接借助MongoTemplate提供的聚合API,构建并执行聚合操作,这是1.9.3版本的标准用法:
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.MatchOperation; import org.springframework.data.mongodb.core.aggregation.GroupOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.beans.factory.annotation.Autowired; public class YourService { @Autowired private MongoTemplate mongoTemplate; public List<YourResultDto> getAggregatedData() { // 定义聚合步骤:匹配条件 MatchOperation matchStage = Aggregation.match(Criteria.where("status").is("VALID")); // 定义聚合步骤:按字段分组统计 GroupOperation groupStage = Aggregation.group("type").count().as("total"); // 组合所有聚合步骤 Aggregation aggregation = Aggregation.newAggregation(matchStage, groupStage); // 执行聚合,指定集合名和结果映射类 AggregationResults<YourResultDto> results = mongoTemplate.aggregate(aggregation, "your_collection_name", YourResultDto.class); return results.getMappedResults(); } }
方案2:在Repository中使用@Query执行原生聚合查询
如果希望在Repository接口中定义聚合方法,可以通过@Query注解编写MongoDB原生聚合语法,1.9.3版本支持该方式:
import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import java.util.List; public interface YourEntityRepository extends MongoRepository<YourEntity, String> { // 原生MongoDB聚合语法,?0对应方法参数 @Query(value = "[ { $match: { status: ?0 } }, { $group: { _id: '$type', total: { $sum: 1 } } } ]", count = false) List<YourResultDto> aggregateByStatus(String status); }
额外提醒
1.9.3.RELEASE是发布于2017年的老旧版本,早已停止维护,存在潜在的安全漏洞和兼容性问题。如果生产环境允许,建议制定升级计划逐步迁移到受支持的版本;若必须保留当前版本,上述两种方案可满足聚合查询需求。
内容的提问来源于stack exchange,提问作者Sameer Makwana
相关产品推荐
相关产品推荐

