mongo的findAndModify方法使用误操作记录


项目中标注页面,保存结果的修改,保存历史出现一个问题:版本号出现一样的

原实现逻辑:

没有结果记录,保存结果;有结果记录,修改结果记录,版本version + 1

使用了findAndModify进行:update.inc("version", 1)

代码如下


查询结果:Result result = xxx;
if (null != result) {
  result = resultRepository.updateResult(result.getVersion(), userTaskFile, param);
}
// 保存历史
handleResultHistory(result, param.getSaveType());

public Result updateResult(Integer version, UserTaskFile userTaskFile, ResultSaveParam param) {
Query query = new Query();
query.addCriteria(Criteria.where("userTaskId").is(userTaskFile.getUserTaskId())
.and("userTaskFileId").is(userTaskFile.get_id())
.and("deleted").is(false)
.and("version").is(version));
Update update = new Update();
update.set("finalResult", param.getResult());
update.inc("version", 1);
update.set("stamp", param.getStamp());
update.set("updateTime", new Date());
return resultMongoTemplate.findAndModify(query, update, Result.class, userTaskFile.getTaskId());
}
问题现象:历史记录不是我修改后的结果
原因排查:
findAndModify方法返回的对象不是我保存的对象,如果想执行更新的对象,需使用:new FindAndModifyOptions().returnNew(true)
return resultMongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Result.class, userTaskFile.getTaskId());

修改完之后问题解决。

版本号的问题也是因此产生的,取的不是最新的version导致

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM