Java Mongodb在仅更新文档的一部分后不执行文档更新';s场

Java Mongodb在仅更新文档的一部分后不执行文档更新';s场,java,spring,mongodb,Java,Spring,Mongodb,我使用的是spring boot版本1.4.2和mongodb 3.4.2 当我在对文档的一个属性进行更改后,使用repository接口保存一个已经存在的文档时,旧文档将被保存。例如: @文档(collection=“UserDoc) 公共类UserDoc{ @身份证 私有字符串id; 私有字符串用户名; 私有字符串密码; 私人互联网; //接球手和接球手。。。 } @自动连线 私有UserDocRepository UserDocRepository; UserDoc UserDoc=use

我使用的是spring boot版本1.4.2和mongodb 3.4.2

当我在对文档的一个属性进行更改后,使用repository接口保存一个已经存在的文档时,旧文档将被保存。例如:

@文档(collection=“UserDoc)
公共类UserDoc{
@身份证
私有字符串id;
私有字符串用户名;
私有字符串密码;
私人互联网;
//接球手和接球手。。。
}
@自动连线
私有UserDocRepository UserDocRepository;
UserDoc UserDoc=userDocRepository.findOne(“dummyId”);
//假设传入的id是正确的,并且返回了UserDoc。
//现在,当我更改其中一个字段时(如年龄并将其保存回来),旧字段
//值被持久化,例如,如果年龄为10,我将其更改为5,则为旧属性
//除非创建新的UserDoc并复制所有
//属性,然后使用正确的值5将其持久化。
用户文档设置(5);
userDocRepository.save(userDoc);//这是用来更新文档的
//新值为5而不是10,因为这可能是根据假设得出的。
UserDoc userDocUpdated=new UserDoc();
userDocUpdated.setId(userDoc.getId);
userDocUpdated.setUserName(userDoc.getUserName);
userDocUpdated.setPassWord(userDoc.getPassWord);
userDocUpdated.setAge(5);//这样,文档将以5作为
//年龄
userDocRepository.save(userDocUpdated);//这会相应地用
//年龄的期望值为5

第一个场景会有什么问题?mongodb或spring boot会有问题吗?任何见解都将受到欢迎。

遗憾的是,我对java知之甚少

这就是你正在做的:

private UserDocRepository userDocRepository;
UserDoc userDoc = userRepository.findOne("dummyId");
userDocRepository.save(userDoc);//this is supposed to update the document
这就是我认为你应该做的:

private UserDocRepository userDocRepository;
UserDoc userDoc = userDocRepository.findOne("dummyId");
userDocRepository.save(userDoc);//this is supposed to update the document

如果我错了,请纠正我:)

很遗憾,我对java知之甚少,但是

这就是你正在做的:

private UserDocRepository userDocRepository;
UserDoc userDoc = userRepository.findOne("dummyId");
userDocRepository.save(userDoc);//this is supposed to update the document
这就是我认为你应该做的:

private UserDocRepository userDocRepository;
UserDoc userDoc = userDocRepository.findOne("dummyId");
userDocRepository.save(userDoc);//this is supposed to update the document

如果我错了,请纠正我:)

第二次调用“userRepository”时,请检查应该是userRepository.save(userDoc);@PaoloMangia,我不明白你的意思,你能更具体一点吗?第二次调用“userRepository”时,请检查应该是userRepository.save(userDoc);@PaoloMangia,我不明白你的意思,你能说得更具体些吗?你是对的,但这只是一个打字错误,这不是这里的主要问题。主要问题是数据库中检索到的对象上的setter在保留到数据库时不会反映,而不会在设置新值之前克隆检索到的对象。谢谢。你是对的,但这是just输入错误,这不是这里的主要问题。主要问题是从数据库检索到的对象上的setter在保留到数据库时没有反映,而没有在设置新值之前克隆检索到的对象。谢谢。