Spring Data访问 MongoDB(十五)----MongoDB特有的数据操作方法

【Spring连载】使用Spring Data访问 MongoDB(十五)----MongoDB特有的数据操作方法

  • 一、更新方法
  • 二、删除方法

除了 查询方法之外,还可以使用专门的方法更新数据。

一、更新方法

你还可以使用上表中的关键字创建查询,以标识匹配的文档,以便对其运行更新。实际的更新操作是由方法本身的@Update注解定义的,如下所示。请注意,派生查询的命名模式以find开头。正在使用update(如updateAllByLastname(…​)) 仅允许与@Query组合使用。
更新将应用于所有匹配的文档,并且无法通过传递Page或使用任何limit关键字来限制范围。返回类型可以是void,也可以是数字类型,例如long,以容纳修改后的documents数。
例1:更新方法

public interface PersonRepository extends CrudRepository<Person, String> {@Update("{ '$inc' : { 'visits' : 1 } }")long findAndIncrementVisitsByLastname(String lastname); --------1@Update("{ '$inc' : { 'visits' : ?1 } }")void findAndIncrementVisitsByLastname(String lastname, int increment); --------2@Update("{ '$inc' : { 'visits' : ?#{[1]} } }")long findAndIncrementVisitsUsingSpELByLastname(String lastname, int increment); --------3@Update(pipeline = {"{ '$set' : { 'visits' : { '$add' : [ '$visits', ?1 ] } } }"})void findAndIncrementVisitsViaPipelineByLastname(String lastname, int increment); --------4@Update("{ '$push' : { 'shippingAddresses' : ?1 } }")long findAndPushShippingAddressByEmail(String email, Address address); --------5@Query("{ 'lastname' : ?0 }")@Update("{ '$inc' : { 'visits' : ?1 } }")void updateAllByLastname(String lastname, int increment); --------6
}1. 更新的筛选器查询是从方法名称派生的。更新是“按原样”进行的,不绑定任何参数。
2. 实际的增量值由绑定到?1占位符的increment方法参数定义。
3. 使用Spring表达式语言(SpEL)进行参数绑定。
4. 使用管道(pipeline)属性可以发布聚合管道更新。
5. 更新可能包含复杂的对象。
6. 将基于字符串的查询与更新相结合。

存储库更新不会发出持久化事件或映射生命周期事件。

二、删除方法

上表中的关键字可以与delete…By或remove…By结合使用,以创建删除匹配documents的查询。
Delete…By查询

public interface PersonRepository extends MongoRepository<Person, String> {List <Person> deleteByLastname(String lastname);    --------1  Long deletePersonByLastname(String lastname);       --------2  @NullablePerson deleteSingleByLastname(String lastname);     --------3  Optional<Person> deleteByBirthdate(Date birthdate); --------4  
}1. 在实际删除所有匹配的文档之前,使用返回类型List检索并返回这些documents。
2. 数字返回类型直接删除匹配的documents,返回删除的documents总数。
3. 单个域类型的结果检索并删除第一个匹配的document。
4.3中相同,但包装在可选类型中。

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

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

相关文章

rust 阿里云oss操作

在rust中如何操作阿里云oss文件&#xff0c;阿里云官方并没有提供这样的sdk&#xff0c;我们可以使用社区的aliyun-oss-rust-sdk库crate来实现。 功能列表 文件下载签名下载签名上传获取上传对象的policy上传本地文件上传内存文件文件删除 添加依赖 [dependencies] # 异步 a…

面试常问:为什么 Vite 速度比 Webpack 快?

前言 最近作者在学习 webpack 相关的知识&#xff0c;之前一直对这个问题不是特别了解&#xff0c;甚至讲不出个123....&#xff0c;这个问题在面试中也是常见的&#xff0c;作者在学习的过程当中总结了以下几点&#xff0c;在这里分享给大家看一下&#xff0c;当然最重要的是…

面试六--TCP粘包问题

1.流式传输协议 流式传输协议&#xff08;Streaming Protocol&#xff09;是一种用于在网络上传输数据的通信协议&#xff0c;它允许数据以连续的流的形式进行传输&#xff0c;而不是一次性发送完整的数据包。流式传输协议即协议的内容是像流水一样的字节流&#xff0c;内容与内…

如何使用vue定义组件之——全局or局部

在Vue中定义一个组件&#xff0c;您需要使用Vue.component()方法来全局注册组件&#xff0c;或者在Vue实例的选项中局部注册组件&#xff0c;以下是一个具体的步骤&#xff1f; 1.全局注册组件&#xff1a; 使用Vue.component()方法来注册一个全局组件&#xff0c;这意味着这个…

Flutter第三弹:常用的Widget

目标&#xff1a; 1&#xff09;常用的Widget有哪些&#xff1f;有什么特征&#xff1f; 2&#xff09;开发一个简单的登录页面。 一、Flutter常用Widget 对于Flutter来说&#xff0c;一切皆Widget. 常用的Widget&#xff0c;包括一些基础功能的Widget. 控件名称功能备注…

代码随想录day19(2)二叉树:二叉树的最大深度(leetcode104)

题目要求&#xff1a;求出二叉树的最大深度 思路&#xff1a;首先要区分二叉树的高度与深度。二叉树的高度是任一结点到叶子结点的距离&#xff0c;而二叉树的深度指的是任一节点到根节点的距离&#xff08;从1开始&#xff09;。所以求高度使用后序遍历&#xff08;从下往上&…

【小白学机器学习9】自己纯手动计算验证,EXCEL的一元线性回归的各种参数值

目录 0 目标 1 构造模型 1.1 构造模型的思路 1.2 具体模型构造的EXCEL公式和过程 2 直接用EXCEL画图&#xff0c;然后生成趋势线的方式进行回归分析 2.1 先选择“观测值Y”的数据&#xff0c;用散点图或者折线图作图 2.2 然后添加趋势线和设置趋势线格式 2.3 生成趋…

ttkefu如何更改头像

ttkefu头像如何更改&#xff1a; 第一种&#xff1a;可以直接点击头像-更改框就出来了

C语言(指针)单元练习二

1有以下程序&#xff1a; #include <stdio.h> void fun( int *a, int i, int j) { int t; if(i<j) { ta[i]; a[i]a[j]; a[j]t; fun(a,i,--j); } } main() { int a[]{1,2,3,4,5,6},i; fun(a,0,5); for(i0; i<6; i) printf("%d ",a[i]); retur…

前后端交互理解 简易表白墙(servlet)

前后端交互理解 简易表白墙&#xff08;servlet&#xff09; 文章目录 前后端交互理解 简易表白墙&#xff08;servlet&#xff09;后端核心内容前后端交互接口约定后端代码展示 上期介绍过 Servlet API &#xff0c;本篇文章目的是借助 servlet 做出一个完整的网站。在一个网站…

工作随记:oracle重建一张1T数据量的大表

文章目录 一、删除测试表二、重命名旧表&#xff1a;三、验证&#xff1a;四、检查alert日志和昨天到今天的统计信息任务收集是否正常 一、删除测试表 #xshell登录用户hthis用户连接登录处理&#xff1a; sqlplus ht/"123456" sqlplus ht/"123456"10.8.5.…

Docker 搭建 PaddleOCR

转自PaddleOCR docker模式 - 简书 目的: 公司要放弃第三方的ocr工具(日语),需要自己搭建训练一套,这篇是搭建 图片要标出文字的选取框 因为是日文所以ocr有专门的工具,只需要文字坐标就好如图 日文的账票需要加密一下 我得环境是 Ubuntu 22.04.1 LTS 1,下载代码 cd /hom…

AI-线性回归模型

线性回归应用场景 房价预测&#xff0c;通过分析房地产市场的历史数据&#xff0c;如房屋大小、位置、建造年份等因素&#xff0c;线性回归可以帮助预测未来房价的走势。 销售额预测&#xff0c;企业可以利用线性回归模型来预测产品的销售额&#xff0c;这通常涉及到产品价格、…

科研三维模型高精度三维扫描服务3d逆向测绘建模工业产品抄数设计

三维抄数技术在科研三维模型的应用已经日益广泛&#xff0c;其高精度、高效率的特点使得科研工作者能够更快速、更准确地获取和分析数据。这一技术的核心在于通过专业的三维扫描仪对实物进行高精度测量&#xff0c;再将这些数据转化为三维数字模型&#xff0c;为后续的研究提供…

QT c++ 双精度数拆分和组合 Tool

本文描述QT c的双精度数拆分和合并&#xff0c;即双精度浮点数拆为四个16位无符号整数以及将四个16位无符号整数组合为双精度浮点数。 开发平台&#xff1a;win10QT6.2.4 MSVC2019 64 bit 在本文的最好列出了代码和可执行文件打包下载链接&#xff08;可直接使用&#xff09;…

Challenge 4 - OSCP A

文章目录 wp141142140143144145wp 141 dirsearch扫描发现db目录,访问后得到一个sql文件。 里面可以看到用户名和密码 INSERT INTO `admin` (`id`, `username`, `password`, `firstname`, `lastname`, `photo`, `created_on`) VALUES (1, nurhodelta, $2y$10$fCOiMky4n5hCJx…

Mysql 死锁案例1-记录锁读写冲突

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10) 事务1事务2T1 START…

linux 模拟shell

&#x1f493;博主CSDN主页:麻辣韭菜-CSDN博客&#x1f493;   ⏩专栏分类&#xff1a;http://t.csdnimg.cn/G90eI⏪   &#x1f69a;代码仓库:Linux: Linux日常代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d;&#x1f5…

BUU [FBCTF2019]RCEService

BUU [FBCTF2019]RCEService 开题&#xff0c;要求以json格式输入命令。 无任何信息泄露&#xff0c;源码如下&#xff1a; <?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt de…

阿里云第一次面试记录

java多态&#xff1f; 多态表示一个对象具有多种的状态&#xff0c;具体表现为父类的引用指向子类的实例 Fu f Zi z(); 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口&#xff0c;使用不同的实例而执行不同操作 特点&#xff1a; 对象类型和引用类型…