zoukankan      html  css  js  c++  java
  • 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导致

  • 相关阅读:
    安装xshell6
    eclipse的安装和汉化
    collectd+infludb+grafana实现tomcat JVM监控
    百度网站统计和CNZZ网站统计对比
    shell,计算指定行的和,计算指定列的和
    我为什么要写博客
    kafka监控之topic的lag情况监控
    用rundeck启动tomcat报错
    xwiki升级8.8.4
    矩阵掩膜操作
  • 原文地址:https://www.cnblogs.com/mabiao008/p/13409674.html
Copyright © 2011-2022 走看看