spring-data-mongodb之MongoTemplate 修改数据
时间:2022-05-06
本文章向大家介绍spring-data-mongodb之MongoTemplate 修改数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天我们学习如何使用spring-data-mongodb来对集合中的数据进行修改操作
首先准备要练习的数据2条,实体类Article的定义请参考之前的文章spring-data-mongodb之MongoTemplate 添加数据
{
"_id": ObjectId("57c43caed4c63d7e39b5dc48"),
"title": "MongoTemplate的基本使用",
"url": "http://cxytiandi.com/blog/detail/0",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 0,
"add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
"_id": ObjectId("57c43caed4c63d7e39b5dc49"),
"title": "MongoTemplate的基本使用",
"url": "http://cxytiandi.com/blog/detail/1",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 0,
"add_time": ISODate("2016-08-29T13:46:22.201Z")
}
//修改第一条author为yinjihuan的数据中的title和visitCount
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
Update update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateFirst(query, update, Article.class);
修改后结果如下,我们会发现第一条数据的title还有visit_count被修改了
{
"_id": ObjectId("57c43caed4c63d7e39b5dc48"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/0",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
"_id": ObjectId("57c43caed4c63d7e39b5dc49"),
"title": "MongoTemplate的基本使用",
"url": "http://cxytiandi.com/blog/detail/1",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 0,
"add_time": ISODate("2016-08-29T13:46:22.201Z")
}
//修改全部符合条件的
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现所有数据的title还有visit_count被修改了
{
"_id": ObjectId("57c43caed4c63d7e39b5dc48"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/0",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
"_id": ObjectId("57c43caed4c63d7e39b5dc49"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/1",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:22.201Z")
}
//特殊更新,更新author为jason的数据,如果没有author为jason的数据则以此条件创建一条新的数据
//当没有符合条件的文档,就以这个条件和更新文档为基础创建一个新的文档,如果找到匹配的文档就正常的更新。
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.upsert(query, update, Article.class);
修改后结果如下,我们会发现新增了一条数据
{
"_id": ObjectId("57c43caed4c63d7e39b5dc48"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/0",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
"_id": ObjectId("57c43caed4c63d7e39b5dc49"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/1",
"author": "yinjihuan",
"tags": [
"java",
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:22.201Z")
}
{
"_id": ObjectId("57c6e1601e4735b2c306cdb7"),
"author": "jason",
"title": "MongoTemplate",
"visit_count": 10
}
//更新条件不变,更新字段改成了一个我们集合中不存在的,用set方法如果更新的key不存在则创建一个新的key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现新加了一个key
{
"_id": ObjectId("57c6e1601e4735b2c306cdb7"),
"author": "jason",
"title": "MongoTemplate",
"visit_count": 10,
"money":100
}
//update的inc方法用于做累加操作,将money在之前的基础上加上100
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").inc("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现money变成200
{
"_id": ObjectId("57c6e1601e4735b2c306cdb7"),
"author": "jason",
"title": "MongoTemplate",
"visit_count": 10,
"money":200
}
//update的rename方法用于修改key的名称
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").rename("visitCount", "vc");
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现visit_count这个key变成vc
{
"_id": ObjectId("57c6e1601e4735b2c306cdb7"),
"author": "jason",
"title": "MongoTemplate",
"vc": 10,
"money":200
}
//update的unset方法用于删除key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").unset("vc");
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现vc这个key被删除了
{
"_id": ObjectId("57c6e1601e4735b2c306cdb7"),
"author": "jason",
"title": "MongoTemplate",
"money":200
}
//update的pull方法用于删除tags数组中的java
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").pull("tags", "java");
mongoTemplate.updateMulti(query, update, Article.class);
修改后结果如下,我们会发现tags里的java被删除了
{
"_id": ObjectId("57c43caed4c63d7e39b5dc48"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/0",
"author": "yinjihuan",
"tags": [
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
"_id": ObjectId("57c43caed4c63d7e39b5dc49"),
"title": "MongoTemplate",
"url": "http://cxytiandi.com/blog/detail/1",
"author": "yinjihuan",
"tags": [
"mongodb",
"spring"
],
"visit_count": 10,
"add_time": ISODate("2016-08-29T13:46:22.201Z")
}
源码地址:spring-data-mongodb
- Codevs2776 寻找代表元
- C#线程篇---解答线程之惑(2)
- webpack学习(三)html-webpack-plugin插件
- Codevs2018 反病毒软件
- 2953: [Poi2002]商务旅行
- 1230: [Usaco2008 Nov]lites 开关灯
- 【推荐】C#线程篇---你所不知道的线程池(4)
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.1)
- 【LeetCode 20】关关的刷题日记45 – Valid Parenthese
- 1819: [JSOI]Word Query电子字典
- 【推荐】C#线程篇---Task(任务)和线程池不得不说的秘密(5.2)
- javascript 事件基础
- 算法模板——sap网络最大流 3(递归+邻接矩阵)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GitHub Actions 指南
- 面试进阶-数据库中的锁
- (译)针对 Kubernetes 工作负载的策略工具
- 又被逼着优化代码,这次我干掉了出入参 Log日志
- 想去看机会?这10道最高频的手撕代码题都会了吗?
- 你知道Python中的4种变量作用域是哪些吗?
- 图解 Python 浅拷贝与深拷贝
- 打卡群刷题总结0716——不同路径
- 原理 + 代码|手把手教你用Python实现智能推荐算法
- 机器学习必刷题-基础概念篇(1):为什么用AUC做评价指标?
- 机器学习必刷题-手撕推导篇(3):FM与softmax
- Python面试必刷题系列(4)
- SQL面试必刷题(1) Case When
- 张量的数学运算
- 数据结构高频面试题-图