mongodb Sping Boot 升级后Mongo模板结果未Map

zaqlnxep  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(126)

从Sping Boot 2.2.6.RELEASE升级到2.4后,下面的Map不起作用,所有Map值都返回null。我找不到任何描述聚合或Map更新的mongo文档。但是rawResults包含了所需的数据。我尝试过更改mongo版本,Spring boot版本升级。
相同代码在 Spring Boot 2.2.6.RELEASE版本中正常工作。

final Aggregation agg = newAggregation(match(Criteria.where("id.cid").is(cId)),
            group("sId.assignmentId", "status").count().as("total"),
            sort(Sort.Direction.DESC, "sId.assignmentId", "status"));
    final AggregationResults<StatusSummeryDTO> groupResults = mongoTemplate.aggregate(agg,
            Submission.class, StatusSummeryDTO.class);

    return groupResults.getMappedResults();

zf9nrax1

zf9nrax11#

在结果DTO类中MongoDB驱动程序版本从3.x更改为4.x后,我们需要使用@Field注解指定确切的字段值。与3.x不同,它不会自动Map,这导致了上述问题。
由于从3.x迁移到4.x时聚合中有一些突破性的变化,我认为这可能是问题所在。为了更好,我已经使用如下新类更改了代码,使其与4.x兼容。

MatchOperation match = match(Criteria.where("id.cid").is(cId));
    GroupOperation group = group("sId.assignmentId", "status").count().as("total");
    SortOperation sort = sort(Sort.Direction.DESC, "sId.assignmentId", "status");

    Aggregation agg = newAggregation(match, group, sort);
    AggregationResults<StatusSummeryDTO> groupResults = mongoTemplate.aggregate(agg, Submission.class, StatusSummeryDTO.class);

    return groupResults.getMappedResults();

相关问题