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导致

原文地址:https://www.cnblogs.com/mabiao008/p/13409674.html