mongodb - spring-data-mongo-db 库更新后聚合工作异常
问题描述
今天我将 Spring Boot 从版本 2.2.2.RELEASE 更新到了 2.5.2。之后聚合开始表现不同。这是一个示例查询(使用 kotlin 语言):
val aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("_id").isEqualTo(ObjectId("6faa215a23cfcf1524cc4a4b"))),
Aggregation.project().andExclude("_id").andExpression("\$\$ROOT").`as`("user"),
Aggregation.lookup("user", "user._id", "_id", "sameUser")
)
return reactiveMongoTemplate.aggregate(aggregation, "user", UserTestAgggr::class.java)
data class UserTestAgggrUserTestAgggr(
val user: User,
val sameUser: User
)
对于 2.2.2.RELEASE 版本,此代码有效。但是在 2.5.2 版本中,API 要求sameUser
param 是一个列表(否则它会引发异常)。
我想避免修改我的查询或对象(因为我有太多的那些)。所以我想我的问题是:有没有办法让最新的 API 表现得像以前一样而无需降级?
解决方案
所以我的答案是创建自己的 MappingMongoConverter,这是一场噩梦,因为它必须扩展 MappingMongoConverter(一些 spring 类直接注入 MappingMongoConverter 而不是使用 MongoConverter 接口)。也必须用 java 编写它(所以我可以依赖 MappingMongoConverter 原始实现)。一点都不好玩,但为我解决了这个问题。
推荐阅读
- gradle - 如果添加了 okhttp-urlconnection 依赖项,则拆分包“okhttp3”会出错
- r - 使用 R 进行多线程计算:如何获得所有不同的随机数?
- dataframe - 将 Spark 数据集作为电子邮件发送
- bash - 如何从 Powershell 核心访问 WSL PATH?
- c++ - C++ 嵌套的 If 语句,它没有按预期工作
- zsh - 将 STDIN 传递给 zsh 中的子 shell
- python - 通过 Python 替换整个列的值
- amazon-web-services - AWS Sagemaker 无法从某些区域读取 S3 数据
- swift - 根据时间创建 if 语句
- angular - 安装 angular 10 后,我无法使用它。检查版本时出现此错误