假设我有一个 Foo 类和一个将 API 公开给 CRUD Foos 的 jax-rs FooResource。
Foo 代表一个 MongoDB 文档。
在 FooResource 中,我会有这样的东西:
@PATCH
@Path("{id}")
public Response update(@PathParam("id") ObjectId id, Foo foo) {
return Response.ok(fooService.update(id, foo)).build();
}
问题是 json 中的 foo 对象将只包含已更改的字段,但我从来不知道它会是什么字段。
我使用带有 Panache 扩展的 Quarkus,我看到的唯一方法是从数据库中检索实体,然后检查我从 http 请求收到的 foo 对象中的每个字段,看看它是否为空,如果不是,在实体中设置新值,最后调用 update() 。
但是,如果我的课程有几十个领域,那将成为一场噩梦。这是一个如此常见的用例,我无法想象(或不想相信)这是做到这一点的唯一方法。
如果有一种方法可以将不完整的文档发送到 MongoDB,以便它只更改此文档中存在的字段,那将是完美的。但我没有找到办法做到这一点。不使用 quarkus(有或没有 panache),也没有使用 mongo API 的 java 驱动程序。
那么有没有更简单的方法来做到这一点?我更喜欢使用带有 Panache 扩展的 quarkus MongoDB 的解决方案,但没有 Panache 甚至直接使用 java 驱动程序 API 的解决方案也可以。
PS:从前端发送完整对象并替换整个文档对我来说不是一个选项。
谢谢。