我有一个实体包含20个不同的键/局部变量。如果我想更新文档,我可以使用UpdateOperations
来执行查询,但我必须提交归档并从新对象设置新值..如果有任何更新方法db中的当前doc仅包含新字段
让我们说:
public class item {
@Id
@Getter
@Setter
private ObjectId id;
@Getter
@Setter
private String itemID;
@Getter
@Setter
private String itemTitle;
..
..
}
所以假设我有一个项目存储,现在我从GUI获得了一个新的DTO,只有一些字段,其余的都是空的。我想创建一个通用更新操作,它只接受来自DTO对象的非可空值,并将在数据库中的现有文档中更新它。
甚至可能吗?
答案 0 :(得分:1)
我想是的!
我看到两种可能的方式:
备选方案1:您可以使用反射来迭代DTO中的每个字段,并将值放入从DB恢复的文档的副本中。在循环结束时,您可以更新文档。
备选方案2:仅更新所需字段。 Mongo只能更新更新操作中的一部分字段:Update Data with Java Driver
答案 1 :(得分:1)
merge可以满足您的需求:Work as if you did an update with each field in the entity doing a $set