我们在Spring Boot应用程序(版本1.5.3)中编写了几个Spring Data Mongo Aggregation查询 . 当我们编写聚合时,我们使用MongoDB版本3.4 . 一切都很好 . 当我们升级到MongoDB版本3.6时,聚合不再有效 . 发生以下错误:“com.mongodb.MongoCommandException:命令失败,错误9:''cursor'选项是必需的,除了带有explain参数的聚合'” .
我们添加了explain参数 . 不再有异常,但mappedResults集合现在为空 . 原始结果存在 .
以下是相关的代码部分:
Aggregation aggregation = Aggregation
.newAggregation(matchOperation, unwindOperation, groupOperation, projectionOperation,
sortOperation, groupOperationPush, sortOperationNext)
.withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build());
AggregationResults<OurDomainClass> results = mongoTemplate.aggregate(aggregation, "ourCollection", OurDomainClass.class);
return results.getMappedResults();
我已经读过,从Spring Data MongoDB 2.1版开始,Spring已经适应了MongoDB 3.6版 . 但是,在Maven Central中,Spring Data MongoDB的版本只能达到2.07 .
有没有我们可以应用于我们的聚合代码的解决方法,可能以某种方式手动将原始结果映射到我们的域类?
1 回答
maven中心提供稳定版本,而对于其他版本(即在编写2.1版本时),您需要在
pom.xml
中指定存储库:见Spring-data-mongodb quickstart
也许您的聚合查询无效/以不同的方式运行,检查您是否可以启用
mongotemplate
日志记录并检查生成的聚合查询,您可以在mongo控制台中复制/粘贴以验证它 .logback.xml
片段: