mongo的findAndModify方法使用誤操作記錄
阿新 • • 發佈:2020-07-31
專案中標註頁面,儲存結果的修改,儲存歷史出現一個問題:版本號出現一樣的
原實現邏輯:
沒有結果記錄,儲存結果;有結果記錄,修改結果記錄,版本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導致