0

如何使用 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"
            )
        }

提前致谢!

4

0 回答 0