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

Java 这是使用Morphia更新mongodb对象的最佳实践吗,java,mongodb,morphia,spark-java,Java,Mongodb,Morphia,Spark Java,我在SparkJava项目中使用MongoDB和Morphia。这对我来说是一次新的冒险。我想知道这是否是更新数据库中现有对象的最佳方法?如果我想替换更新整个文档,是否有更好的方法 我的ContentBlockDao中的更新方法示例 @Override public ContentBlock update(ContentBlock contentBlock) throws DaoException { Query<ContentBlock> query = datastore

我在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;
}
@覆盖
公共ContentBlock更新(ContentBlock ContentBlock)引发异常{
Query Query=datastore.createQuery(ContentBlock.class)
.field(“id”).equal(新ObjectId(contentBlock.getId());
UpdateOperations UpdateOperations=setValuesForUpdate(
datastore.createUpdateOperations(ContentBlock.class),
内容块);
datastore.update(查询、更新操作);
返回query.get();
}
私有更新操作setValuesForUpdate(更新操作更新操作,
ContentBlock(ContentBlock){
updateOperations.set(“html”,contentBlock.getHtml());
set(“lastUpdater”,contentBlock.getLastUpdater());
返回更新操作;
}

让morphia为您管理对象更新

使用保存方法进行完整的文档替换。如果实体中没有
\u id
,则创建新文档,否则替换文档

<T> Key<T> save(T entity); 
密钥保存(T实体);
使用合并方法进行选择性字段更新。这将比较dbobject与输入实体,并更新更改的字段

<T> Key<T> merge(T entity)
键合并(T实体)
对于任何其他查询条件,可以使用update方法

<T> UpdateResults update(T entity, UpdateOperations<T> var2);
UpdateResults更新(T实体,UpdateOperations变量2);

让morphia为您管理对象更新

使用保存方法进行完整的文档替换。如果实体中没有
\u id
,则创建新文档,否则替换文档

<T> Key<T> save(T entity); 
密钥保存(T实体);
使用合并方法进行选择性字段更新。这将比较dbobject与输入实体,并更新更改的字段

<T> Key<T> merge(T entity)
键合并(T实体)
对于任何其他查询条件,可以使用update方法

<T> UpdateResults update(T entity, UpdateOperations<T> var2);
UpdateResults更新(T实体,UpdateOperations变量2);

我尝试过保存,但无论出于何种原因,我最终看到文档中的同一对象以相同的id重复。我不确定为什么会发生这种情况。我发送一个json字符串并将其转换为ContentBlock对象,然后保存它。您确定它的
\u id
不是
id
,因为
\u id
字段在MongoDB中具有唯一约束吗?尝试在
ContentBlock
类中使用
@id
注释来注释id字段。如果问题仍然存在,您可以添加
ContentBlock
对象以及示例json字符串和转换代码。我尝试过保存,但无论出于何种原因,我最终发现文档中的同一对象以相同的id重复。我不确定为什么会发生这种情况。我发送一个json字符串并将其转换为ContentBlock对象,然后保存它。您确定它的
\u id
不是
id
,因为
\u id
字段在MongoDB中具有唯一约束吗?尝试在
ContentBlock
类中使用
@id
注释来注释id字段。如果问题仍然存在,您可以添加
ContentBlock
对象以及示例json字符串和转换代码。