1. 程式人生 > 實用技巧 >mongo的findAndModify方法使用誤操作記錄

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