插入数据

将参数转换成一个对象,直接调用insert方法即可: 
举例:

  1. @Document(collection="student")
  2. public class Student {
  3. private String studentId;
  4. private String name;
  5. private int age;
  6. private String sex;
  7. public String getStudentId() {
  8. return studentId;
  9. }
  10. public void setStudentId(String studentId) {
  11. this.studentId = studentId;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. }

首先创建一个javabean,@Document注解是指定该对象和哪个collection对应。

然后我们将要存入的数据封装到这个对象中,并调用mongodbTemplate的insert方法。

  1. public void insert(){
  2. Student student = new Student("1","zhangsan",18,"男");
  3. mongoTemplate.insert(student);
  4. }

当然,在开发中复杂的数据结构是比较常见的,例如我们需要存储嵌套文档的时候,如果直接使用javabean是比较麻烦的,这种比较复杂的数据结构,我们只需要拿到json字符串,并将其转换成json对象,即可直接插入到mongodb中。

  1. public void insert(){
  2. String classStr = "{'classId':'1','Students':[{'studentId':'1','name':'zhangsan'}]}";
  3. JSONObject parseObject = JSON.parseObject(classStr);
  4. mongoTemplate.insert(parseObject,"class");
  5. }

insert方法有一个缺陷,就是每调用一次,就会插入一条新的数据,但是有很多时候,我们需要如果数据存在,则修改,如果不存在,则插入,这个时候,更新操作是比较常用的。

更新数据操作

更新一条数据,在关系型数据库中,我们需要where条件筛选出需要更新的数据,并且要给定更新的字段及值,在mongodb中也是一样,我们需要给定条件和值:

  1. public void update(){
  2. Query query = new Query();
  3. query.addCriteria(Criteria.where("classId").is("1"));
  4. Update update = Update.update("teacher", "Mr.wang");
  5. mongoTemplate.upsert(query, update, "class");
  6. }

在classId为1的数据中修改teacher字段为Mr.wang,如果这条数据中没有teacher字段,则会添加该字段。 
mongodbTemplate中还有另外一个更新方法:

  1. mongoTemplate.updateFirest(query, update, "class");
  2. mongoTemplate.updateMulti(query, update, "class");

这个两个方法一个是更新满足条件的第一条数据,一个是更新所有满足条件的数据,它们和upsert的区别就是,如果query条件没有筛选出对应的数据,那么upsert会插入一条新的数据,而update则什么都不会做。和关系型数据库中的merge和update的一样。

添加内嵌文档中的数据

  1. Query query = Query.query(Criteria.where("classId").is("1"));
  2. Student student = new Student("1", "lisi", 18, "man");
  3. Update update = new Update();
  4. //update.push("Students", student);
  5. update.addToSet("Students", student);
  6. mongoTemplate.upsert(query, update, "class");

addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据。

修改内嵌文档中的数据

  1. public void update(){
  2. Query query = Query.query(Criteria.where("classId").is("1")
  3. .and("Students.studentId").is("1"));
  4. Update update = Update.update("Students.$.name", "lisi");
  5. mongoTemplate.upsert(query, update, "class");
  6. }

删除内嵌文档中的数据

  1. Query query = Query.query(Criteria.where("classId").is("1")
  2. .and("Students.studentId").is("3"));
  3. Update update = new Update();
  4. update.unset("Students.$");
  5. mongoTemplate.updateFirst(query, update, "class");

这种方法有一个缺陷,会将符合条件的数据修改成null,如果要彻底删除,则需要使用pull(pull删除内嵌文档的时候,student对象的值一定要和被删除的一模一样)

  1. Query query = Query.query(Criteria.where("classId").is("1"));
  2. Update update = new Update();
  3. Student student = new Student("2","lisi",18,"man");
  4. update.pull("Students",student);
  5. mongoTemplate.updateFirst(query, update, "class");

删除操作

  1. Query query = Query.query(Criteria.where("classId").is("1"));
  2. mongoTemplate.remove(query,"class");

remove操作是直接将所有满足条件的数据给删除,如果只是要删除内嵌文档中的数据,则需要使用上面更新操作。

mongoTemplate 常见操作相关推荐

  1. MongoDB学习总结五(详细记录MongoDB Aggregation聚合框架常见操作)

    简明:本文详细记录使用Aggregation聚合框架对MongoDB数据库常见操作,包括过滤.分组.求和.排序和分页设计实现等等.相比较于MongoTemplate,使用Aggregation对Mon ...

  2. 路径,文件,目录,I/O常见操作汇总

    摘要:    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案 ...

  3. python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】

    本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...

  4. BOM,DOM常见操作和DHML

    BOM (Browser Object Model)浏览器对象模型,控制浏览器的一些行为 window对象 代表一个HTML文档 属性 页面导航的5个属性 self, parent, top, ope ...

  5. go语言笔记——切片函数常见操作,增删改查和搜索、排序

    7.6.6 搜索及排序切片和数组 标准库提供了 sort 包来实现常见的搜索和排序操作.您可以使用 sort 包中的函数 func Ints(a []int) 来实现对 int 类型的切片排序.例如  ...

  6. 在单链表写入一组数据代码_链表常见操作和15道常见面试题

    什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...

  7. python基础实例-Python基础之字符串常见操作经典实例详解

    本文实例讲述了Python基础之字符串常见操作.分享给大家供大家参考,具体如下: 字符串基本操作 切片 # str[beg:end] # (下标从 0 开始)从下标为beg开始算起,切取到下标为 en ...

  8. C#路径/文件/目录/I/O常见操作汇总(一)

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题, 尽量提供一些解决方案,即使没有你想要的答案,也希望能提 ...

  9. python下selenium模拟浏览器常见操作

    本文主要记录下selenium的常见操作,如定位具体元素的不同方法.在具体元素内循环.提取文本等.具体代码如下: # -*- coding: utf-8 -*- ''' Created on 2019 ...

最新文章

  1. pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
  2. Window编译Opencv CUDA
  3. kafka java_Kafka 使用Java实现数据的生产和消费demo
  4. windows sharepoint service 3.0 wss3 URL 映射问题,差点把网站废掉
  5. ActiveX控件的另类免费签名法
  6. 品牌不可不知的YouTube的影片行销策略
  7. FPGA时钟资源使用
  8. iPhone 14处理器曝光:万众期待的最硬核升级凉了
  9. 解决windows update失败,正在还原的问题
  10. MediaPlayer/MediaRecorder与AudioTrack/AudioRecord区别(三十九)
  11. 算法笔记--带权并查集及其模板题。
  12. 导出excel文件对空值用“--“占位处理
  13. 2022年下半年网络工程师上午真题及答案解析
  14. 面向全球用户的Teams app之时区篇
  15. 送你一份迷你书,全面了解如何做好大促技术备战
  16. iOS开发三方资源 - 欲先攻其事必先利其器
  17. 求帮忙解决图灵机器人运行不回复的问题
  18. 网络视频监控系统的现状和发展
  19. WindowsAPI 窗口
  20. 气动高压球阀行业现状调研及趋势分析报告

热门文章

  1. 解析世界杯超大规模直播场景下的码率控制 1
  2. 用邻接表存储图c语言,邻接表、邻接多重表、十字链表及C语言实现
  3. Win10使用远程桌面黑屏怎么解决
  4. 马斯克爆料Twitter裁了八成员工;OpenAI CEO:GPT-5根本不存在;小鹏被曝年终奖打0.5折 | AI一周资讯
  5. 库克自愿降薪超 40%,苹果降速!
  6. 简历中没写中间件,面试5分钟就被请出去了,ElasticSearch 改咋学呢?
  7. macro min passed 3 arguments, but takes just 2 min(const _Tp, const _Tp, _Compare);
  8. jira linux 一键安装包下载地址,JIRA使用教程:使用文件包安装JIRA
  9. 【C#学习笔记】 List.AddRange 方法
  10. htmlunit模拟登录