从Spring Boot 2.2.6.RELEASE升级到2.4后,以下映射不起作用&为所有映射值返回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();

enter image description here

enter image description here

推荐答案

在Result DTO类中,MongoDB驱动程序版本从3.x更改为4.x后,我们将需要使用@Field注释指定准确的字段值.与3.x不同,它不会自动映射,这导致了上述问题.

由于在从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();

Mongodb相关问答推荐

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

MongoDB与合并对象聚合

在MongoDB中获取所有帖子时如何获取相关用户信息

如何用Python和MongoDB找到单据字段的最大值?

如何在Mongo中查找数组中的特定对象

Golang 无法在 MongoDB 中创建文档

MongoDB:嵌套数组计数+原始文档

使用新字段插入数据或使用 updateOne mongodb 有条件地更新

如何将 MongoDB 集合中的 _id 字段更改为 User_id?

Meteor mongo 驱动程序可以处理 $each 和 $position 运算符吗?

NodeJS中的密码重置

直接从 URL 查询字符串提供的 mongo 查询有多危险?

MongoDB - 聚合 - 获取数组中的唯一项

插入违反唯一索引的 MongoDB 文档时如何捕获错误?

Mongo按实际上是数字的字符串值排序

mongodb 的计数性能

移动 MongoDB 的数据文件夹?

在mongoose中查询虚拟属性

Spring Data MongoDB - 在哪里以编程方式为 Mongo 集合创建索引?