mongodb - 如何在 spring-data-mongodb 中编写 UpdateMany mongo 查询
问题描述
如何使用 spring-data-mongodb 编写以下 mongo db 查询?
db.getCollection('assignment').updateMany(
{},
[
{
$set: {
'students': {
$map: {
input: '$students',
as: "ss",
in: "$$ss._id"
}
}
}
}
]
)
这是数据模型的样子:
{
assignmentId: JUUID
students: [ {_id: JUUID, name: String} ]
}
我想将此迁移到以下架构
{
assignmentId: JUUID
students: [JUUID]
}
这是我尝试过的,但它获取了内存中的所有数据并且我得到了 OOMException。有没有更好的方法来编写这个查询,类似于updateMany
我不需要在内存中获取数据的地方。
mongoTemplate.find(Query(), Map::class.java, "assignment").forEach {
val studentIds = ((it.get("students")) as List<Map<*, *>>).map { s -> s.get("_id") } as List<UUID>
mongoTemplate.updateFirst(
Query().addCriteria(Criteria.where("_id").`is`(it.get("_id"))),
Update().set("students", studentIds),
"assignment"
)
}
提前致谢!
解决方案
推荐阅读
- python - 如何让玩家无法在 python 中穿过其他物体?
- c++ - 未找到标识符 - Visual Studio 2019 中的错误 C3861
- sql - 使用 sql EXCEPT 构建 EAVT 事实存储
- reactjs - 在顶层使用 useContext 访问当前状态
- powershell - Powershell IE 自动化 - 无法通过 ID 或标记名指定文本框
- java - 如何从 servlet 检索请求属性?
- typescript - 使用 TypeScript 在 Jest 中模拟 ES6 类方法
- javascript - Mixin 不适用于元素,但 box-shadow 可以
- javascript - 如果陈述一个短语而不是一个特定的标题?
- javascript - 如何避免使用 Yarn 在 monorepo 中安装软件包