这是使用Morphia更新mongodb对象的最佳实践

时间:2017-06-18 13:55:04

标签: java mongodb morphia spark-java

我在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;
}

1 个答案:

答案 0 :(得分:3)

让morphia为您管理对象更新。

使用save方法完成文档替换。如果实体中没有_id替换文档,则创建一个新文档。

<T> Key<T> save(T entity); 

使用merge方法进行选择性字段更新。这将比较dbobject与输入实体并更新已更改的字段。

<T> Key<T> merge(T entity)

对于任何其他查询条件,您可以使用更新方法。

<T> UpdateResults update(T entity, UpdateOperations<T> var2);