我在SparkJava项目中使用MongoDB和Morphia。对我来说,这是一次新的冒险。我想知道这是否是更新数据库中现有对象的最佳方法?如果我想替换更新整个文档,还有更好的方法吗?
我的ContentBlockDao中的示例更新方法
@Override
public ContentBlock update(ContentBlock contentBlock) throws DaoException {
Query<ContentBlock> query = datastore.createQuery(ContentBlock.class)
.field("id").equal(new ObjectId(contentBlock.getId()));
UpdateOperations<ContentBlock> updateOperations = setValuesForUpdate(
datastore.createUpdateOperations(ContentBlock.class),
contentBlock);
datastore.update(query, updateOperations);
return query.get();
}
private UpdateOperations setValuesForUpdate(UpdateOperations<ContentBlock> updateOperations,
ContentBlock contentBlock) {
updateOperations.set("html", contentBlock.getHtml());
updateOperations.set("lastUpdater", contentBlock.getLastUpdater());
return updateOperations;
}
最佳答案
让morphia为您管理对象更新。
使用保存方法进行完整的文档替换。如果实体中不存在_id
,则创建一个新文档,否则替换文档。
<T> Key<T> save(T entity);
使用合并方法进行选择性字段更新。这会将dbobject与输入实体进行比较,并更新已更改的字段。
<T> Key<T> merge(T entity)
对于任何其他查询条件,可以使用更新方法。
<T> UpdateResults update(T entity, UpdateOperations<T> var2);