Morphia更新具有未定义字段数的文档

时间:2018-02-09 09:09:16

标签: java mongodb insert-update morphia

我正在为MongoDB使用morphia开展一个小项目。我想知道什么是更新文档的最佳方式,而不知道要更新哪个字段。比方说,我有一个表单,在保存到数据库之后我可能想回来更改一些字段,但我还没有决定要改变什么。 我当前的解决方案是对所有字段进行更新,无论它是否被更改,当然它会抛出null异常。 Morphia抱怨null值更新。 我的代码如下所示:

    Query<Project> q = datastore.find(Project.class, "_id", projectToUpdate.getId());

    UpdateOperations<Project> update
            = datastore.createUpdateOperations(Project.class)
                    .set("name", updatedProject.getName())
                    .set("deadline", updatedProject.getDeadline())
                    .set("priority", updatedProject.getPriority())
                    .set("completion", updatedProject.getCompletion())
                    .set("description", updatedProject.getDescription())
                    .set("projectManager", updatedProject.getPM())
                    .set("collaborators", updatedProject.getAllCollaborators())
                    .set("teams", updatedProject.getAllTeams())
                    .set("userStories", updatedProject.getUserStories())
                    .set("log", updatedProject.getLog());
    datastore.findAndModify(q, update);

异常

Exception in thread "main" org.mongodb.morphia.query.QueryException: Value cannot be null.
at org.mongodb.morphia.query.UpdateOpsImpl.set(UpdateOpsImpl.java:220)
at controllers.QueryProjects.updateProject(QueryProjects.java:78)
at controllers.DBConnection.TestMongo(DBConnection.java:152)
at penelope.Main.main(Main.java:12)

我正在考虑使用委托/事件处理程序来单独更新每个字段,但我担心这可能会降低性能。

1 个答案:

答案 0 :(得分:0)

您应该只使用datastore.save()。请参阅http://mongodb.github.io/morphia/1.3/getting-started/quick-tour/

上的示例