kiyokiwa 2021-08-18 15:05 采纳率: 81.8%
浏览 431
已结题

用mongoTemplate更新一个属性较多的实体类,如何避免写重复的条件,判断是否使用update方法去更新该字段?

(此描述是在java的springboot的环境下)就是在我更新一个会员对象时,会员的属性大概有20多个,添加会员的时候只要使用mongoTemplate的insert方法就能一次性插入。但是在更新操作的时候,可能只修改某几个字段,如果直接更新全部对象的话,前端传来的数据除了需要修改的字段,其他字段都为null,这时候数据库中就会造成文档数据的丢失,例如(会员user:属性有name和age)我只修改name属性为”李四“,age前端不传(也就是null),那么update的话,修改数据库数据就是name=李四 和age =null,这种情况。

于是我相出了一个最笨的方法,那就是去判断每个属性是否为null,这样能解决问题,但是会造成代码复杂,光属性就二三十。一大串。不知道怎么修改,希望解答,谢谢。

  • 写回答

1条回答 默认 最新

  • 一枚小爪哇 2021-08-18 16:57
    关注

    建议修改的时候前端把值全部传到后端,那样后端就不用判断哪些字段为空了,如果使用update,也是需要知道修改了哪个字段,并且这个字段不为空,也是需要判断的,所以还不如使用save,需要前端把所有入参值都传到后端,
    update修改某个字段

      @Transactional(rollbackFor = Exception.class)
        public void updateUser(String id, User user) {
            Criteria criteria = Criteria.where("id").is(id);
            Query query = Query.query(criteria);
            Update update = new Update();
            // 修改特定字段
            update.set("phone", user.getPhone());
            update.set("username", user.getUsername());
    
            mongoTemplate.updateFirst(query, update, AuditDocSynonymGrpPoJo.class);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 请问如何在matlab里使用raven工具?
  • ¥100 关于ios手游充值到一定金额,再点充值提示公众号的问题。
  • ¥15 求一个stm32串口控制程序
  • ¥20 Windows 驱动开发版本疑问相关
  • ¥15 MAC 未能打开磁盘映像
  • ¥15 fastcap使用,二维导体输入问题
  • ¥15 hosts修改后不能访问
  • ¥15 关于化学反应速率C++编译问题/FLUENT
  • ¥20 Yolov5训练报错
  • ¥15 Unity发布gzip压缩的webgl之后让浏览器可以正常显示画面