Spring Data Mongo更新整个对象

news2025/1/11 10:47: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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【产品人卫朋】华为IPD体系:IPD相关术语

目录 术语合集 课程 术语合集 BB&#xff1a;building block&#xff0c;组件 BG&#xff1a;business group&#xff0c;业务群 BLM&#xff1a;business leadership model&#xff0c;业务领先模型 BMT&#xff1a;business management team&#xff0c;业务管理团队 B…

这6个超实用的图片素材网站,高清、免费,赶紧马住

推荐6个超实用的图片素材网站&#xff0c;高清无水印&#xff0c;绝对值得收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html#?vNTYxMjky 网站主要是为新手设计师提供免费素材的&#xff0c;素材的质量都很高&#xff0c;类别也很多&#xff0c;像平面、UI、…

Restful接口开发与测试—接口测试

开发完接口&#xff0c;接下来我们需要对我们开发的接口进行测试。接口测试的方法比较多&#xff0c;使用接口工具或者Python来测试都可以&#xff0c;工具方面比如之前我们学习过的Postman或者Jmeter &#xff0c;Python脚本测试可以使用Requests unittest来测试。 测试思路…

数据结构中常见的树

二叉树&#xff1a;每个子节点只有两个节点的树&#xff0c;每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结 点)&#xff0c;并且&#xff0c;二叉树的子树有左右之分&#xff0c;其次序不能任意颠倒 我们一般在解题过程中二叉树有两种主要的形式&#xff1a;满二叉树…

徐延涛:医疗健康企业如何重构客户管理的“营销”与“服务”?

随着人口老龄化和生活健康水平的提升&#xff0c;中国的医疗健康行业市场规模前景向好。《2023易凯资本中国健康产业白皮书》显示&#xff0c;从2022年到2030年的八年里&#xff0c;中国健康产业的整体规模将从10万亿元增长到接近20万亿&#xff0c;年复合增长率将达到9.5%-10%…

TS入门(TS类型有哪些?怎么使用?)

TS简介 TS&#xff08;TypeScript&#xff09;是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;能够为 JavaScript 添加静态类型检查和面向对象编程的特性。TS 可以在编译时进行类型检查&#xff0c;从而提高代码的可读性、可维护性和可靠性&am…

PMP课堂模拟题目及解析(第12期)

111. 客户拒绝了一项交付成果&#xff0c;因为它不符合约定的质量规格&#xff0c;项目团队调查该问题&#xff0c;并确定供应商提供的零件有问题&#xff0c;供应商拒绝纠正这种情况。项目经理应该审查什么&#xff1f; A. 与供应商订立的服务水平协议 B. 采购管理计划和合…

从领英退出中国,解析融云《社交泛娱乐出海作战地图》从0到1出海方法论

近期&#xff0c;“领英职场”宣布将于 2023 年 8 月 9 日起正式停止服务。移步【融云全球互联网通信云】回复“地图”免费领 一时之间&#xff0c;网友纷纷送上祭文。有人觉得猝不及防&#xff0c;但更多人直言并不意外。 领英在中国的折戟终局&#xff0c;似乎从 2021 年改版…

chatgpt赋能python:PythonSave函数:保存和保护你的数据

Python Save函数&#xff1a;保存和保护你的数据 Python Save函数是Python编程中最常用的函数之一。它允许开发者将数据保存到文件或数据库中&#xff0c;在未来的操作中访问和使用。无论你是处理大数据集还是需要保护数据免受未经授权访问&#xff0c;Python Save函数都可以为…

Hegegraph的Gremlin语言(全)

Hegegraph的Gremlin语言&#xff08;全&#xff09; 内容 • 基本概念 • Step讲解 • HugeGraph特有Gremlin语句&#xff08;schema相关&#xff09;基本概念 • Gremlin • 是一门图的查询语言&#xff0c;地位作用与数据库的 SQL相当 • 支持图数据的增、删、改、查 • 图…

鸿蒙Hi3861学习十九-DevEco Device Tool源码获取、编译、下载

一、简介 在上一篇文章中&#xff0c;已经讲述了如何在Windows通过Remote SSH远程连接Linux下的DevEco Device Tool。这篇文章&#xff0c;来说一下关于源码的获取、编译与下载。建议先按照上一篇文章进行环境搭建。 鸿蒙Hi3861学习十八-DevEco Device Tool环境搭建_t_guest的…

运动员最佳配对问题——算法设计与分析(C实现)

目录 一、问题简述 二、分析 三、代码展示 四、结果验证 一、问题简述 问题描述&#xff1a;羽毛球队有男女运动员各n人。给定2个n*n矩阵P和Q。P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞争优势&#xff1b;Q[i][j]是男运动员i和女运动员j配合的女运动员竞…

msvcr110.dll丢失的解决方法,多种方法助你解决msvcr110.dll丢失

当您在尝试打开某个程序或游戏时&#xff0c;可能会看到一个错误消息&#xff0c;提示您的计算机缺少msvcr110.dll文件。这是因为该文件是Microsoft Visual C Redistributable库的一部分&#xff0c;缺少它可能会导致应用程序无法正常运行。在本文中&#xff0c;我们将详细介绍…

【接口测试】JMeter接口关联测试

‍‍1 前言 我们来学习接口管理测试&#xff0c;这就要使用到JMeter提供的JSON提取器和正则表达式提取器了&#xff0c;下面我们来看看是如何使用的吧。 2 JSON提取器 1、添加JSON提取器 在线程组右键 > 添加 > 后置处理器 > JSON提取器 2、JSON提取器参数说明 N…

19-03 基于业务场景的架构技术选型

Java架构师系列导航目录 金融领域的挑战与架构设计 金融领域的方向 借贷保险证券交易 互联网金融 vs 传统金融 满足更广泛群体的金融需求增强金融普惠性提高金融服务效率 互联网金融前景 近十年蓬勃发展&#xff0c;朝阳行业&#xff1a;花呗、借呗、微粒贷、余额宝双刃剑&am…

【案例教程】基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

动态远程桌面如何用来做爬虫

爬虫需要动态IP主要是为了避免被目标网站封禁或限制访问。如果使用固定IP进行爬取&#xff0c;很容易被目标网站识别出来并封禁&#xff0c;导致无法继续爬取数据。而使用动态IP可以让爬虫在不同的IP地址之间切换&#xff0c;降低被封禁的风险。此外&#xff0c;动态IP还可以帮…

Ebay、亚马逊高低单价产品如何打造?自养号测评策略解析

很多卖家都认为低单价产品太卷了&#xff0c;于是选择了进入了高单价细分类目&#xff0c;一进入&#xff0c;发现广告竞价高到自己无法接受&#xff0c;转化还特别差&#xff0c;然后一直在挣扎中。眼下整个跨境市场&#xff0c;无论是高单价产品&#xff0c;还是低单价产品&a…

redis-server源码

1 redis主流程 redis启动流程: 1 加载配置&#xff1b;2 初始化redis master、slave以及sentinel的sri&#xff1b;3 注册事件事件serverCron。 <span style"background-color:#f5f2f0"><span style"color:black"><span style"color:…

WebRTC学习笔记01——最简单实现一对一视频通讯

最近开始学习WebRTC音视频通讯技术&#xff0c;这里来分享一下学习的内容和感受。 学习WebRTC的门槛稍微高那么一点点&#xff0c;需要同时具备服务端和前端的开发能力&#xff0c;因为我主要是做java服务端开发&#xff0c;这里我用到的服务端代码也是java编写的。 在写代码…