mongoTemplate 常见操作
插入数据
将参数转换成一个对象,直接调用insert方法即可:
举例:
- @Document(collection="student")
- public class Student {
- private String studentId;
- private String name;
- private int age;
- private String sex;
- public String getStudentId() {
- return studentId;
- }
- public void setStudentId(String studentId) {
- this.studentId = studentId;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- }
首先创建一个javabean,@Document注解是指定该对象和哪个collection对应。
然后我们将要存入的数据封装到这个对象中,并调用mongodbTemplate的insert方法。
- public void insert(){
- Student student = new Student("1","zhangsan",18,"男");
- mongoTemplate.insert(student);
- }
当然,在开发中复杂的数据结构是比较常见的,例如我们需要存储嵌套文档的时候,如果直接使用javabean是比较麻烦的,这种比较复杂的数据结构,我们只需要拿到json字符串,并将其转换成json对象,即可直接插入到mongodb中。
- public void insert(){
- String classStr = "{'classId':'1','Students':[{'studentId':'1','name':'zhangsan'}]}";
- JSONObject parseObject = JSON.parseObject(classStr);
- mongoTemplate.insert(parseObject,"class");
- }
insert方法有一个缺陷,就是每调用一次,就会插入一条新的数据,但是有很多时候,我们需要如果数据存在,则修改,如果不存在,则插入,这个时候,更新操作是比较常用的。
更新一条数据,在关系型数据库中,我们需要where条件筛选出需要更新的数据,并且要给定更新的字段及值,在mongodb中也是一样,我们需要给定条件和值:
- public void update(){
- Query query = new Query();
- query.addCriteria(Criteria.where("classId").is("1"));
- Update update = Update.update("teacher", "Mr.wang");
- mongoTemplate.upsert(query, update, "class");
- }
在classId为1的数据中修改teacher字段为Mr.wang,如果这条数据中没有teacher字段,则会添加该字段。
mongodbTemplate中还有另外一个更新方法:
- mongoTemplate.updateFirest(query, update, "class");
- mongoTemplate.updateMulti(query, update, "class");
- Query query = Query.query(Criteria.where("classId").is("1"));
- Student student = new Student("1", "lisi", 18, "man");
- Update update = new Update();
- //update.push("Students", student);
- update.addToSet("Students", student);
- mongoTemplate.upsert(query, update, "class");
addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据。
- public void update(){
- Query query = Query.query(Criteria.where("classId").is("1")
- .and("Students.studentId").is("1"));
- Update update = Update.update("Students.$.name", "lisi");
- mongoTemplate.upsert(query, update, "class");
- }
- Query query = Query.query(Criteria.where("classId").is("1")
- .and("Students.studentId").is("3"));
- Update update = new Update();
- update.unset("Students.$");
- mongoTemplate.updateFirst(query, update, "class");
这种方法有一个缺陷,会将符合条件的数据修改成null,如果要彻底删除,则需要使用pull(pull删除内嵌文档的时候,student对象的值一定要和被删除的一模一样)
- Query query = Query.query(Criteria.where("classId").is("1"));
- Update update = new Update();
- Student student = new Student("2","lisi",18,"man");
- update.pull("Students",student);
- mongoTemplate.updateFirst(query, update, "class");
删除操作
- Query query = Query.query(Criteria.where("classId").is("1"));
- mongoTemplate.remove(query,"class");
remove操作是直接将所有满足条件的数据给删除,如果只是要删除内嵌文档中的数据,则需要使用上面更新操作。
mongoTemplate 常见操作相关推荐
- MongoDB学习总结五(详细记录MongoDB Aggregation聚合框架常见操作)
简明:本文详细记录使用Aggregation聚合框架对MongoDB数据库常见操作,包括过滤.分组.求和.排序和分页设计实现等等.相比较于MongoTemplate,使用Aggregation对Mon ...
- 路径,文件,目录,I/O常见操作汇总
摘要: 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案 ...
- python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】
本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...
- BOM,DOM常见操作和DHML
BOM (Browser Object Model)浏览器对象模型,控制浏览器的一些行为 window对象 代表一个HTML文档 属性 页面导航的5个属性 self, parent, top, ope ...
- go语言笔记——切片函数常见操作,增删改查和搜索、排序
7.6.6 搜索及排序切片和数组 标准库提供了 sort 包来实现常见的搜索和排序操作.您可以使用 sort 包中的函数 func Ints(a []int) 来实现对 int 类型的切片排序.例如 ...
- 在单链表写入一组数据代码_链表常见操作和15道常见面试题
什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...
- python基础实例-Python基础之字符串常见操作经典实例详解
本文实例讲述了Python基础之字符串常见操作.分享给大家供大家参考,具体如下: 字符串基本操作 切片 # str[beg:end] # (下标从 0 开始)从下标为beg开始算起,切取到下标为 en ...
- C#路径/文件/目录/I/O常见操作汇总(一)
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题, 尽量提供一些解决方案,即使没有你想要的答案,也希望能提 ...
- python下selenium模拟浏览器常见操作
本文主要记录下selenium的常见操作,如定位具体元素的不同方法.在具体元素内循环.提取文本等.具体代码如下: # -*- coding: utf-8 -*- ''' Created on 2019 ...
最新文章
- pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
- Window编译Opencv CUDA
- kafka java_Kafka 使用Java实现数据的生产和消费demo
- windows sharepoint service 3.0 wss3 URL 映射问题,差点把网站废掉
- ActiveX控件的另类免费签名法
- 品牌不可不知的YouTube的影片行销策略
- FPGA时钟资源使用
- iPhone 14处理器曝光:万众期待的最硬核升级凉了
- 解决windows update失败,正在还原的问题
- MediaPlayer/MediaRecorder与AudioTrack/AudioRecord区别(三十九)
- 算法笔记--带权并查集及其模板题。
- 导出excel文件对空值用“--“占位处理
- 2022年下半年网络工程师上午真题及答案解析
- 面向全球用户的Teams app之时区篇
- 送你一份迷你书,全面了解如何做好大促技术备战
- iOS开发三方资源 - 欲先攻其事必先利其器
- 求帮忙解决图灵机器人运行不回复的问题
- 网络视频监控系统的现状和发展
- WindowsAPI 窗口
- 气动高压球阀行业现状调研及趋势分析报告
热门文章
- 解析世界杯超大规模直播场景下的码率控制 1
- 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现
- Win10使用远程桌面黑屏怎么解决
- 马斯克爆料Twitter裁了八成员工;OpenAI CEO:GPT-5根本不存在;小鹏被曝年终奖打0.5折 | AI一周资讯
- 库克自愿降薪超 40%,苹果降速!
- 简历中没写中间件,面试5分钟就被请出去了,ElasticSearch 改咋学呢?
- macro min passed 3 arguments, but takes just 2 min(const _Tp, const _Tp, _Compare);
- jira linux 一键安装包下载地址,JIRA使用教程:使用文件包安装JIRA
- 【C#学习笔记】 List.AddRange 方法
- htmlunit模拟登录