Spring Data 与MongoDB 集成三:操作篇(修改)

2023-11-20

本文转载至:http://blog.csdn.net/congcong68/article/details/47357203#

一.简介

     spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的update的操作,可以对在存储数据时是以键-值对的集合键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档进行修改,我们今天介绍对基本文档的修改的方法、参数进行介绍。

我们对MongoDB的基本文档修改, MongoDB的查询语法:

  

[sql]  view plain  copy
  1. >db.collection.update(  
  2.  <query>,  
  3.  <update>,  
  4.  upsert:<boolean>,  
  5.  multi:<boolean>  


参数

类型

描述

query

document

要修改哪些的查询条件,类似于SQL 的 where

update

document

要修改的字段对应的值

upsert

boolean

可选的,默认值是false。如果根据查询条件没找到对应的文档,如果设置为true,相当于执行insert,如果设置为false,不做任何的操作。

multi

boolean

可选的,默认值是false。如果根据查询条件找到对应的多条记录是,如果设置为false时,只修改第一条,如果设置为true,全部更新

 

我们SpringData  MongoDB提供的对应的修改方法

  1. mongoTemplate. updateFirst  修改符合条件第一条记录

      

  2. mongoTemplate. updateMulti  修改符合条件的所有

     

  3. mongoTemplate. Upsert        修改符合条件时如果不存在则添加

     

  参数说明:

     (1)    Query : 要修改哪些的查询条件,类似于SQL 的 where

 

       1) org.springframework.data.mongodb.core.query

 

       2) org.springframework.data.mongodb.core.query.BasicQuery

 

      这两个参数的区别和使用,在Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一) 有介绍过,就在具体介绍


   (2)    update

      1)      org.springframework.data.mongodb.core.query.Update

      2)      子类org.springframework.data.mongodb.core.query.BasicUpdate


          org.springframework.data.mongodb.core.query.BasicUpdate继承了org.springframework.data.mongodb.core.query.Update


    Update提供了一些方法对基本文档进行操作

Spring MongoDB Update

MongoDB

描述

   

Update rename (String oldName, String newName)

$rename

重命名字段

Update set (String key, Object value)

$set

用来指定一个键的值,如果不存在则创建它

Update unset (String key)

$unset

用来指定一个键的值,如果不存在不创建创建它

 

 BasicUpdate继承了update方法,BasicUpdate构造参数可以自己实现update  SQL 语句

  1)BasicUpdate(DBObjectupdate Object)  Object是JSON格式

  2)BasicUpdate(Java.lang.StringupdateString)

 

  BasicUpdate需要手动实现$set等操作符SQL语句,也可以使用Update的一些操作修改文档的操作方法,因为继承了Update类

 

二.mongoTemplate.Upsert 操作

     mongoTemplate. Upsert 修改符合条件时如果不存在则添加


   1.对修改符合条件时如果不存时操作

 

     第一步:我们查询条件onumber=001的cname进行修改,Spring DataMongoDB代码实现

          

[java]  view plain  copy
  1. mongoTemplate.upsert(newQuery(Criteria.where("onumber").is("001")), newUpdate().set("cname""zcy"), collectionName);  

     

     第二步:我们先查询MongoDB数据

           

[sql]  view plain  copy
  1. >db.orders.find({"onumber":"001"})  
  2. >   

    第三步:我们执行mongoTemplate.upsert操作

   

    第四步:查询MongoDB数据:

[sql]  view plain  copy
  1. >db.orders.find({"onumber":"001"})  
  2.   { "_id" : ObjectId("55c5673e28121ca9e1dd397f"),"onumber" : "001""cname" : "zcy" }  


    修改符合条件时如果不存在则添加,相当于执行了insert

 

   2. 对修改符合条件时存在时,修改字段不存在的操作


       第一步:Spring Data MongoDB代码没改变

   

      第二步:我们先查询MongoDB数据 :

[sql]  view plain  copy
  1. > db.orders.find({"onumber":"001"})  
  2.   { "_id" : ObjectId("55c5689727e0a66301f9bb51"),"onumber" : "001" }  


   第三步: 我们执行mongoTemplate.upsert操作


    第四步:然后在查询MongoDB数据:

[sql]  view plain  copy
  1. >db.orders.find({"onumber":"001"})  
  2.    { "_id" : ObjectId("55c5689727e0a66301f9bb51"),"onumber" : "001""cname" : "zcy" }  


    相当于执行了MongoDB的:

[sql]  view plain  copy
  1. >db.orders.update(                             
  2.     {"onumber" :"001"},   
  3.     {$set: { "cname " : "zcy2"} },   
  4.      true,   
  5.      true   
  6.  )   

     验证了 mongoTemplate. Upsert 修改符合条件时如果不存在则添加

 

三.mongoTemplate. updateFirst

      mongoTemplate. updateFirst 修改符合条件第一条记录

  

   1.      对修改符合条件时多条记录的操作

       第一步:  我们查询条件cname=zcy 的date进行修改,Spring Data MongoDB代码实现

[java]  view plain  copy
  1. mongoTemplate. updateFirst (newQuery(Criteria.where("cname").is("zcy ")), newUpdate().set("date""2015-08-08"), collectionName);  

         

      第二步:我们先查询MongoDB数据

         


      第三步:执行mongoTemplate. updateFirst操作


      第四步:然后在查MongoDB数据:

           

 


四.mongoTemplate. updateMulti 

 

    mongoTemplate.updateMulti修改符合条件的所有


 1.      对修改符合条件时多条记录的操作

         第一步:我们查询条件cname=zcy 的date进行修改,Spring Data MongoDB代码实现

[java]  view plain  copy
  1. mongoTemplate. updateMulti (newQuery(Criteria.where("cname").is("zcy ")), newUpdate().set("date""2015-08-08"), collectionName);  


         第二步: 我们先查询MongoDB数据

             

 

 

         第三步:执行mongoTemplate. updateMulti操作


         第四步:查询MongoDB数据:

                 

      

          修改符合条件的所有数据文档

 

四.BasicUpdate操作

     BasicUpdate  JSON格式,需要我们自己实现update SQL,BasicUpdate需要手动实现$set等操作符SQL语句,也可以使用Update的一些操作修改文档的操作方法,因为继承了Update类

     

      mongoTemplate.updateFirst 修改符合条件第一条记录

  

     第一步:对修改符合条件时多条记录的操作时,我们查询条件cname=zcy 的date进行修改,Spring Data MongoDB代码实现

[java]  view plain  copy
  1. BasicDBObject basicDBObject=new BasicDBObject();  
  2. basicDBObject.put("$set"new BasicDBObject("date","2015-08-09"));  
  3. Updateupdate=newBasicUpdate(basicDBObject);  
  4. mongoTemplate.updateFirst(new Query(Criteria.where("cname").is("zcy")), update,collectionName);  


    第二步:查询MongoDB的数据

            


   第三步:执行mongoTemplate.updateFirst 操作。

 

   第四步:查询MongoDB数据

       


    basicDBObject可以同时对多个字段进行修改


    今天介绍了对基本的文档的修改,只对Update set (String key, Object value)操作


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

Spring Data 与MongoDB 集成三:操作篇(修改) 的相关文章

  • MVC模型图

    MVC图
  • 【联想RQ940】联想RQ940更换主板电池+重新设置BIOS

    RQ940服务器告警灯闪烁 连接管理口查看日志 判断问题为主板纽扣电池电压低 纽扣电池型号为CR2032 停业务 关机 下架 拆机 电池位于图片所示位置 可以先将左边RAID卡拆下来 方便更换电池 2 重新设置BIOS 更换电池后 由于BI
  • SpringBoot 微服务 详解

    1 注入 1 1 Bean对象管理 Spring Boot 由于没有XML文件 所以所有的Bean管理都放入在一个配置类中实现 配置类就是类上具有 Configuration的类 这个类就相当于之前的applicationContext x
  • 计算机竞赛 基于CNN实现谣言检测 - python 深度学习 机器学习

    文章目录 1 前言 1 1 背景 2 数据集 3 实现过程 4 CNN网络实现 5 模型训练部分 6 模型评估 7 预测结果 8 最后 1 前言 优质竞赛项目系列 今天要分享的是 基于CNN实现谣言检测 该项目较为新颖 适合作为竞赛课题方向
  • bilibili的评论ip属地显示未知

    现象 出于某些原因 我们在日常使用中的大部分平台都开启了IP地址显示 一般会显示当事人所在的地址 这其中就有一些奇怪的地址 在此不谈魔法 就比如我最近在刷B站的时候 就在评论区发现了一些显示 未知 的ip 而只要点进他们的主页还是会发现他们
  • 广度优先搜索(BFS)(队列实现) 走迷宫

    BFS应用 寻找最短路径或者遍历路径 树 图或者更抽象的 实现方法 队列 为什么bfs需要队列实现 队列的原理是先进先出 而广度优先搜索类似于树的层次遍历 从离根节点最近的点开始向外扩散 因此用队列将最先遍历的点存入 后遍历的点后存入 符合
  • react 父组件调用子组件的方法

    子组件中 const child forwardRef props ref gt useImperativeHandle ref gt 这里面的方法是暴露给父组件的 test console log 我是组件里的test方法 test2 t
  • druid 手动指定数据源_Springboot集成 Druid

    前言 对于数据访问层 无论是Sql还是NoSql SpringBoot默认采用整合SpringData的方式进行统一管理 添加大量的自动配置 屏蔽了很多设置 引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层
  • 【JS 构造

    个人格言 时间是亳不留情的 它真使人在自己制造的镜子里照见自己的真相 Git专栏 Git篇 JavaScript专栏 js实用技巧篇 该专栏持续更新中 目的是给大家分享一些常用实用技巧 同时巩固自己的基础 共同进步 欢迎前来交流 你的一键三
  • Java POI输出excel单元格画斜线

    sheet cell画斜线 首先初始化HSSFWorkbook对象 通过此对象创建excel的一个名称为 line 的sheet 下面是通过sheet对象创建单元格 HSSFWorkbook wb new HSSFWorkbook HSSF
  • springboot分模块问题

    springboot 分模块开发时 mvn clean install报错 Failed to execute goal org springframework boot spring boot maven plugin 1 5 9 REL
  • CentOS系统如何如设置使系统自动锁屏的时间?

    方便大家 Application System Tools Settings Privacy close Screen Lock Lock Screen After Blank For 可以关闭 可以自己设置吧 我设置了1个小时

随机推荐

  • VMWare虚拟机安装的问题

    VMWare虚拟机安装Win10出现 Attempting to start up from 直接上图 选择ISO镜像以后 开启虚拟机出现以下界面 等待一会没有操作以后出现以下界面 解决方法 1 关闭虚拟机电源 一定要关闭 2 找到该虚拟机
  • 简单图文解释冯诺依曼体系结构(通俗易懂版)

    冯诺依曼式计算机主要由输入设备 输出设备 控制器 运算器 存储器该五个组成部分构成 我们可以将该体系结构的运作通过人类接收信息 处理信息 并输出信息这个过程来加以类比理解 人类 当眼睛看到某些信息 这些信息被存储到记忆装置 大脑从记忆装置取
  • 热敏电阻温度特性曲线_空调温度传感器知识学习。

    在空调维修过程中 温度传感器 热敏电阻 故障比例较高 一旦出现开路 短路或特性曲线不良等故障 空调将显示不正常的代码 不能正常工作 由于温度传感器上没有标明参数和阻值 往往在维修中难以确定 就是同一品牌 不同型号 其阻值也不一定相同 温度传
  • CRC校验关键点说明(内附C语言CRC校验库)

    文章目录 目的 CRC校验关键点 参数模型 计算方式 CRC校验库 源文件 使用测试 总结 目的 CRC即循环冗余校验码 Cyclic Redundancy Check 是数据通信领域中最常用的一种查错校验码 其特征是信息字段和校验字段的长
  • 【Arduino基础教程】Moisture Sensor土壤湿度传感器

    Moisture Sensor土壤湿度传感器 Moisture Sensor土壤湿度传感器可读取在其周围的土壤存在的水分的量 因此 它可以用于监视你的花园土壤湿度并提醒你适时浇花 模块特征 供电 3 3v 或者 5v 输出信号 0 4 2v
  • 我在spring4整合hibernate5遇到的问题

    1 nested exception is java lang NoClassDefFoundError org hibernate engine SessionFactoryImplementor hibernate4整合spring3
  • 逆矩阵的算法

    花了10分钟 终于明白矩阵的逆到底有什么用 首先 我们先来看看这个数的倒数 倒数 其实矩阵的逆矩阵也跟倒数的性质一样 不过只是我们习惯用A 1表示 问题来了 既然是和倒数的性质类似 那为什么不能写成1 A 其实原因很简单 主要是因为矩阵不能
  • 前端vue项目部署到tomcat,一刷新报错404解决方法

    原文链接 https my oschina net u 1471354 blog 4277008 VUE项目部署到Tomcat之后 刷新页面会出现404 此问题主要是使用了VUE router的History模式 一 解决方案 1 编辑se
  • 海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系

    在HiMPP手册中都会有这么一张图 先讲一下视频缓存池这个概念 视频缓存池主要向媒体业务提供大块物理内存管理功能 负责内存的分配和回收 这部分具体什么作用 首先视频输入回需要大量的内存 打比方1080P的视频输入 VI部分怎么保存或者使用呢
  • spring配置详解-连接池配置

    一 连接池概述 数据库连接池概述 数据库连接是一种关键的有限的昂贵的资源 这一点在多用户的网页应用程序中体现得尤为突出 对数据库连接的管理能显著影响到整个 应用程序的伸缩性和健壮性 影响到程序的性能指标 数据库连接池正是针对这个问题提出来的
  • 刷题之142. 环形链表 II

    给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示链表尾
  • 投资捕鱼游戏市场的如何避雷?以及研发技术问题。

    随着国内捕鱼市场在姚记科技 波克城市 途游等捕鱼龙头的深耕下 整个产品的研发 运营门槛都了非常大的提高 对于目前想要研发出一款具有竞争力的产品和版本 投入低于500万的资金很难出有竞争力的产品 加上运营门槛的提高 运营成本至少需要准备500
  • 苹果截屏快捷键_新手小白用苹果电脑搞科研,学会这些才不至于尴尬!

    搞科研的朋友们每天都离不开电脑 于是 科研界又分为 Windows 派和 Mac 派 要想提高生产力 本人还是想大吼一声 Mac 大法好 看着师弟师妹对着苹果电脑咬牙切齿 恨不得分分钟砸了它 殊不知不是系统不好用 而是我们了解得太少 如何避
  • Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

    通过题目标题和题目中的回显提示 应该是针对user agent的注入 查看一下源码 源码对用户名以及密码做了处理 尝试报错注入 拿到数据库名 1 and extractvalue 1 concat 0x7e select database
  • 如何利用seaborn绘制factorplot图?

    如何利用seaborn绘制factorplot图 今天番茄加速就来解答一下 seaborn 是基于matplotlib开发的 提供更高一级的接口 做出的可视化图更加具有表现力 下面介绍 seaborn 库的入门使用方法 首先导入它和 pyp
  • 机器人底层通讯(1): 串口调试工具--minicom/picocom

    1 linux串口调试工具汇总对比 http blog csdn net jazzsoldier article details 70183995 2 查看串口的连接信息和状态 http blog csdn net cgzhello1 ar
  • 2020美赛A题解题方法

    题目 问题A 向北移动 全球海洋温度影响某些海洋生物的栖息地质量 当温度变化太大 它们无法继续繁荣时 这些物种就会迁移到其他更适合它们现在和未来生活和繁殖成功的栖息地 其中一个例子就是美国缅因州的龙虾种群 它们正缓慢地向北迁移到加拿大 那里
  • 已解决,错误码2,ytb网站报错 “您没有联网,请检查网络连接”

    如果是时间问题 建议先看这篇 https blog csdn net weixin 42375356 article details 113816276 2021 04 17 17 47 42 tcp 127 0 0 1 53282 acc
  • hexo(sakura)给博客增添侧边栏(回到顶部,跳转评论,深色模式,播放音乐)&&Valine-1.4.4新版本尝鲜+个性制定(表情包、qq头像、UI样式)

    文章目录 hexo sakura 给博客增添侧边栏 回到顶部 跳转评论 深色模式 播放音乐 原理 直接使用 Valine 1 4 4新版本尝鲜 个性制定 表情包 qq头像 UI样式 总结 本文全是参考大佬博客 顺着步骤写的记录 hexo s
  • Spring Data 与MongoDB 集成三:操作篇(修改)

    本文转载至 http blog csdn net congcong68 article details 47357203 一 简介 spring Data MongoDB提供了org springframework data mongodb