gpt4 book ai didi

java - 使用实体属性更新文档而不是替换它(保留未映射的属性)

转载 作者:行者123 更新时间:2023-11-30 08:16:44 27 4
gpt4 key购买 nike

给出 mongodb 集合中的示例文档:

{"_id": 100, "name": "User Name", "sideField": "some value"}

吗啡实体:

@Entity()
public class User {
@Id public long id;
public String name;
}

是否可以使用以下示例用户对象更新 mongodb 文档

User user = new User();
user.id = 100;
user.name = "New Name";

这样Morphia就不会删除“sideField”属性?

默认情况下,当我使用 Morphia 的 Datastore.save(...) 方法时,Morphia 会将给定 _id 下的整个文档替换为从实体构建的新文档,从而删除所有未映射到实体的属性。我知道我可以对选定的字段进行“手动”更新,但这不是我将对象映射器添加到项目依赖项的原因。

最佳答案

最后,我放弃了 Morphia 并使用 MongoDB Java 驱动程序 API 3.0.0 和 Jackson 解决了问题,如下所示:

String updateJson = .... //I get JSON String via REST API
// here, if I want to validate update I use JSON Schema
// or Jackson (to map updateJson to object and validate it with javax.validation)
Document updateDoc = Document.parse(updateJson);
Document setUpdate = new Document("$set", updateDoc);
mongoDb.getCollection("COLL").updateOne(Filters.eq("_id", someID), setUpdate);

当然,这仅适用于简单的更新,但对于我的情况来说已经足够了。

关于java - 使用实体属性更新文档而不是替换它(保留未映射的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com