首页 文章

Spring Aggregation Framework和MongoDB 3.6版

提问于
浏览
0

我们在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 回答

  • 1

    maven中心提供稳定版本,而对于其他版本(即在编写2.1版本时),您需要在 pom.xml 中指定存储库:

    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>2.1.0.BUILD-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-libs-snapshot</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    

    Spring-data-mongodb quickstart

    也许您的聚合查询无效/以不同的方式运行,检查您是否可以启用 mongotemplate 日志记录并检查生成的聚合查询,您可以在mongo控制台中复制/粘贴以验证它 . logback.xml 片段:

    <logger name="org.springframework.data.mongodb" level="DEBUG"/>
    <logger name="org.springframework.data.mongodb.core.MongoTemplate" level="DEBUG"/>
    

相关问题