Spring Data MongoDB 更新整个对象

2023-11-12

第一步:在pom.xml文件中引入下述依赖,当前Spring Boot的版本为 2.7.6

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.7.6</version>
</dependency>

第二步:创建数据库users,并且user集合中插入一条数据

use users;
db.user.insert({name:"张三",age:18,address:"广东"})

第三步:在application.yml文件配置连接MongoDB 

spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/users

第四步:构建user集合的实体类(需要注意的是这个实体类中我没有添加@Document、@Id、@Field、@Transient等注解

package com.example.demo.mongo;

import lombok.Data;

@Data
public class User {

    private String name;

    private int age;

    private String address;
}

虽然没写这些注解,但只要字段定义名称一致,则不会 影响下述测试案例的运行。如果是其它相关的使用,还是建议加上去,避免不必要的麻烦。 

第五步:构建测试类,测试更新整个文档对象

package com.example.demo;

import com.example.demo.mongo.User;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import java.util.List;

@SpringBootTest
public class UserApplicationTests {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void contextLoads() {
        User user = new User();
        user.setName("李四");
        user.setAge(20);
        user.setAddress("上海");
        Query query = new Query(Criteria.where("_id").is("646ed68ab9002f0de86da306"));
        Document doc = new Document();
        mongoTemplate.getConverter().write(user, doc);
        Update update = Update.fromDocument(doc);
        mongoTemplate.upsert(query, update, "user");

        List<User> users = mongoTemplate.findAll(User.class);
        System.out.println(users);
    }
}

执行上述代码,其输出结果为:

[User(name=李四, age=20, address=上海)]

进入到Mongo的客户端中可以看到文档对象里面的数据已更新,如下图所示:

 

以前的话如果我们想更新一个文档对象时,需要通过Update对象(org.springframework.data.mongodb.core.query.Update)一个一个的赋予key、value值,当更新的字段值比较多时,操作步骤还是比较繁琐的。

当前这种用法就可以避免上述这种情况,直接通过实体类去覆盖更新就可以。

另外如果不想过于粗暴,还可以指定字段进行排除,进行覆盖更新时不更新该字段的值: 

Update.fromDocument(org.bson.Document object, String... exclude)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data MongoDB 更新整个对象 的相关文章

随机推荐

  • union关键字,理解-应用场景-优点

    C语言共用体 C语言union用法 详解 biancheng net 理解为 需求场景 某变量可具有多重身份 然而在使用某变量时 它只能确定为其中一种身份 union关键字 这种好处是 既可以满足需求 又可以不浪费内存 union关键字创建
  • Spring MVC 起步

    一 MVC 首先http的请求到达前端控制器 前端知道具体的请求 将代理给到控制器 控制器了解具体的业务细节 因此调用业务逻辑 生成业务数据 并将业务数据返回给前端控制器 然后前端控制器将数据分发给我们的业务视图 由业务视图来呈现业务页面返
  • JS对于字符串的切割截取

    1 slice start end 方法 start 起始索引 开始位置 end 终止索引 结束位置 如果某个参数为负 则从字符串的结尾开始计数 如果省略第二个参数 则该方法将裁剪字符串的剩余部分 var str Apple Banana
  • Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取 考虑到这点 就要确保用户一些敏感数据 例如密码 的安全性 今天 我们要学的是 hash 背后的基础知识 以及如何用它来保护你的 web 应用的密码 申明 密码学是非常复杂的一门学科 我不是这方面的专家
  • 如何在 Python 中开始机器学习?(小白必看)

    其实学习机器学习的最好方法是设计和完成小项目 Python 是一种流行且功能强大的解释型语言 与 R 不同 Python 是一种完整的语言和平台 可用于研究和开发以及开发生产系统 还有很多模块和库可供选择 提供多种方式来完成每项任务 开始使
  • INTERNALERROR> AttributeError: ‘CollectReport‘ object has no attribute ‘description‘问题解决

    隔一段时间没写脚本 今天又写新的脚本 写完之后执行报错 INTERNALERROR gt AttributeError CollectReport object has no attribute description 执行了下之前写的脚本
  • adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)

    import math import numpy as np import matplotlib pyplot as plt RATIO 3 椭圆的长宽比 LIMIT 1 2 图像的坐标轴范围 class PlotComparaison o
  • 在分页式管理方式下实现主存空间的分配和回收

    转自 在分页式管理方式下采用位示图来表示主存分配情况 实现主存空间的分配和回收 呱呱乐编程 CSDN博客 方便学习 如有侵权 联系本人 立即删除 include
  • 5e服务器信息被拦截,5e登陆csgo总被拦截什么意思(5e进csgo提示被拦截)

    办法1 验证游戏完整性重启steam 2 重启计算机 3 可能是系统兼容性问题win10 64 建议更换系统 4 到游戏目录里用管理员身份启动试试 希望能够帮助你 望采纳 好像是进程里有多个steam客户端进程 或者你5e配置的游戏路径不对
  • Vue使用AntV/G2例子

  • vue项目文件导入导出的方法总结

    文件导入 点击文件上传时点击按钮的结构 用element ui组件的el upload组件 点击时的方法需要传入一个file文件的参数下来 按钮结构
  • vue3全局引入element-plus后使用 Message 消息提示

    import ElementPlus from element plus const app createApp App app use ElementPlus mount app 使用confirm的方式 proxy confirm
  • 毕业设计-基于深度学习的实例分割研究

    目录 前言 课题背景和意义 实现技术思路 一 实例分割研究现状 二 实例分割的特殊应用 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学
  • Python爬取头像网站图片

    import urllib request from urllib import request from bs4 import BeautifulSoup x 1 url https www woyaogexing com touxian
  • Spring SringMVC之配置文件配置学习

    废话不多说 先来一个web项目web xml实际例子 web xml
  • 学习如何使用github

    转载自 http www open open com lib view open1396580186465 html 以提交的一次开源代码为例 教会你步入开源的世界 1 首先登陆到https github com平台上注册一个自己的账号 这
  • [图像处理]YUV图像处理入门3

    5 yuv420格式的灰阶测试图 本程序中的函数主要是为YUV420P视频数据流的第一帧图像添加边框 函数的代码如下所示 file 5 yuv graybar cpp author luohen brief gray scale bar o
  • 【云原生之Docker实战】容器的资源限制使用方法

    云原生之Docker实战 容器的资源限制使用方法 一 容器资源限制介绍 二 检查本地Docker状态 三 查看本地容器系统相关文件 1 查看容器配置目录 2 查看内存相关文件 3 查看cpu相关文件 四 容器内存资源的限制 1 查看内存限制
  • Linux下Shell脚本编程简介

    最近经常使用Linux 感觉太频繁地敲击键盘有些累了 于是想到了Shell脚本 可以把太多的命令写成一个脚本 这样每次执行一遍sh文件 就可以省去了敲击键盘的时间 还可以保护键盘哦 于是在网上搜了一些有关Linux下脚本编程的内容 Shel
  • Spring Data MongoDB 更新整个对象

    第一步 在pom xml文件中引入下述依赖 当前Spring Boot的版本为 2 7 6