如何在不影响其字段值的情况下更新Mongo DB的文档

时间:2017-01-25 09:34:32

标签: java mongodb jsp spring-mvc

我试图找到上述问题的答案,但未能得到答案。以下是我的工作流程,

我的JSP代码是:

<f:form action="saveSubDepartment" modelAttribute="subDepartment" method="Post">

<f:hidden path="subDepartmentId"/>

<f:input path="subDepartmentName"/>

<f:input path="departmentId"/>

<!-- Many other fields-->

<input type="submit" name="create" value="Save">

</f:form>

我在java中的域类是:

public class SubDepartment implements Serializable {

@Id
private String subDepartmentId=null;

private String departmentId;    
private String subDepartmentName;
private Date createdOn;
private Date modifiedOn;

/*corresponding setters and getters*/

}

我的数据库中有一个文件

{ 
"_id" : "17", 
"_class" : "somepackage.SubDepartment", 
"departmentId" : "DEPT1", 
"subDepartmentName" : "hello", 
"createdOn" : ISODate("2017-01-25T05:48:53.840+0000"), 
"modifiedOn" : ISODate("2017-01-25T07:19:15.616+0000"),
and so many....
}

当我点击“保存”按钮时,我希望除了字段createdOn之外更新所有字段,但是当我使用以下更新查询时,createdOn字段设置为null,DAO类中的更新方法如下< / p>

public String save(SubDepartment subDepartment){

String id=subDepartment.getSubDepartmentId();
subDepartment.setModifiedOn(new Date());
mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(id)), new Update(), SubDepartment.class);
mongoTemplate.save(subDepartment, subDepartmentCollection);

}

当我执行上述操作时,createdOn字段设置为null,因为在我的JSP页面中没有提到它。

所以我尝试使用

 <f:hidden path="createdOn">

但它对我不起作用,因为它是后端的日期格式。

在更新DAO类中的整个文档并将其设置为已编辑的文档之前,通过获取字段值(通过执行一个以上的查询)来使其工作的方式。

我的要求还有其他更好的解决方案吗?在此先感谢: - )

2 个答案:

答案 0 :(得分:1)

我现在无法访问代码,今天下午我会更新回复,但我觉得这样的事情就是这样。

public String save(SubDepartment subDepartment){

    String id=subDepartment.getSubDepartmentId();
    subDepartment.setModifiedOn(new Date());
    mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(id)), new Update("modifiedOn"), SubDepartment.class);
    mongoTemplate.save(subDepartment, subDepartmentCollection);

 }

在新的更新(&#34; modifiedOn&#34;)中,如果您没有说出他试图更新所有内容的所有内容,请说明您要更新的所有字段

答案 1 :(得分:0)

根据我的理解,您尝试更新modifiedOn。代码应该是这样的:

public String save(SubDepartment subDepartment){
   Query query = new Query(Criteria.where("_id").is(subDepartment.getSubDepartmentId()));
   Update update = Update.update("modifiedOn", new Date());
   mongoTemplate.updateFirst(query, update, SubDepartment.class);
}