首页 > 解决方案 > 如何在 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"
            )
        }

提前致谢!

标签: mongodbkotlinquery-optimizationspring-data-mongodbspring-data-mongodb-reactive

解决方案


推荐阅读