对于mongodb的内嵌对象的各种操作大叔在.net平台时已经说过,同时大叔也自己封装过mongo的仓储,使用也都很方便,而在java springboot框架里当然也有对应的方法,下面主要说一下,希望对刚接触mongodb的同学有所帮助!

一 测试DEMO的数据结构

  1. /**
  2. * 地址.
  3. */
  4. @Data
  5. @NoArgsConstructor
  6. @AllArgsConstructor
  7. public class Address {
  8.  
  9. /**
  10. * 编号.
  11. */
  12. @Id
  13. private String id;
  14. /**
  15. * 省.
  16. */
  17. private String province;
  18. /**
  19. * 市.
  20. */
  21. private String city;
  22. /**
  23. * 区.
  24. */
  25. private String district;
  26. /**
  27. * 状态.
  28. */
  29. private Status status;
  30. /**
  31. * 扩展.
  32. */
  33. private List<AddressExtension> addressExtension;
  34. }

其中它有一个内嵌的集合对象,addressExtension,我们添加了一些测试数据,如图:

下面介绍几种常用的数据操作:

  1. /**
  2. * 获取数据.
  3. *
  4. * @param province 省
  5. * @param city 市
  6. * @return
  7. */
  8. @Override
  9. public Address findByProvinceAndCity(String province, String city) {
  10. Query query = new Query(Criteria.where("province").is(province).and("city").is(city));
  11. return mongoTemplate.findOne(query, Address.class, "address");
  12. }
  13.  
  14. /**
  15. * 更新字段.
  16. *
  17. * @param address .
  18. */
  19. @Override
  20. public void updateCity(Address address) {
  21. Query query = new Query(Criteria.where("_id").is(address.getId()));
  22. Update update = Update.update("city", address.getCity());
  23. mongoTemplate.upsert(query, update, Address.class);
  24. }
  25.  
  26. /**
  27. * 添加内嵌文档中的数据.
  28. *
  29. * @param id .
  30. * @param info .
  31. */
  32. @Override
  33. public void addAddressInfo(String id, String info) {
  34. Query query = Query.query(Criteria.where("_id").is(id));
  35. AddressExtension ext = new AddressExtension();
  36. ext.setInfo(info);
  37. Update update = new Update();//update.push("Students", student);
  38. // addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据
  39. update.addToSet("addressExtension", ext);
  40. mongoTemplate.upsert(query, update, Address.class);
  41. }
  42.  
  43. /**
  44. * 更新内嵌文档里某条元素
  45. *
  46. * @param oldInfo
  47. * @param newInfo
  48. */
  49. @Override
  50. public void updateAddressInfo(String oldInfo, String newInfo) {
  51. Query query = new Query(Criteria.where("addressExtension.info").is(oldInfo));
  52. Update update = new Update();
  53. update.set("addressExtension.$.info", newInfo);
  54. mongoTemplate.upsert(query, update, Address.class);
  55.  
  56. }
  57.  
  58. /**
  59. * lambda filter.
  60. * @param list
  61. * @param predicate
  62. * @return
  63. */
  64. public List<AddressExtension> conditionFilter(List<AddressExtension> list, Predicate<AddressExtension> predicate){
  65. return list.stream().filter(predicate).collect(Collectors.toList());
  66. }
  67.  
  68. /**
  69. * 删除内嵌文档中的数据.
  70. *
  71. * @param id .
  72. * @param addressExtension .
  73. */
  74. @Override
  75. public void delAddressInfo(String id, AddressExtension addressExtension) {
  76. Query query = Query.query(Criteria.where("_id").is(id));
  77. Update update = new Update();
  78. update.pull("addressExtension", addressExtension);
  79. mongoTemplate.updateFirst(query, update, Address.class);
  80. }
  81.  
  82. /**
  83. * 删除文档.
  84. *
  85. * @param id .
  86. */
  87. @Override
  88. public void delAddress(String id) {
  89. Query query = Query.query(Criteria.where("_id").is(id));
  90. mongoTemplate.remove(query, Address.class);
  91. }

其中,更新内嵌集合比较特别,它使用了集合元素的下标进行更新,$就是表示当前要更新的元素的下标!

感谢阅读!

springboot~mongo内嵌集合的操作的更多相关文章

  1. 补习系列(17)-springboot mongodb 内嵌数据库

    目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...

  2. 补习系列(17)-springboot mongodb 内嵌数据库【华为云技术分享】

    目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...

  3. SpringBoot优化内嵌的Tomcat

    SpringBoot测试版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId ...

  4. MongoDB内嵌文档操作

    实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...

  5. springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤

    去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...

  6. SpringBoot Boot内嵌Tomcat

    Spring Boot: SpringBoot-start-web 里面依赖的环境中 如果是外部的Tomcat 容器,可以通过修改config进行配置 内嵌的呢? 如何定制和修改Servlet容器的相 ...

  7. SpringBoot 优化内嵌的Tomcat

    在通过SpringBoot调用其它服务时,报错 org.springframework.web.client.ResourceAccessException: I/O error on POST re ...

  8. SpringBoot优化内嵌的Tomcat ---设置MaxConnections

    使用kill -9杀掉springboot应用后,立马java -jar重启,会报错,需要等待一段时间才能启动成功,报错的原因是:/tmp/tomcat-docbase.474979491043437 ...

  9. springBoot定制内嵌的Tomcat

    此篇仅介绍配置方式,详细配置内容百度查阅 工程结构: 可以通过配置的方式设置参数,如下 application.properties #配置tomcat端口 # server.port= 8888 # ...

随机推荐

  1. Java 学习笔记 (五) Java Compile\Build\Make的区别

    以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...

  2. client.go

    package)*time.Second) ], {         hasConn := false         waitc := time.After(cfg.DialTimeout)     ...

  3. Java 链接SQL Server 数据库

    1 //Java 连接 SQL Server数据库 2 public static final String DRIVERNAME="com.microsoft.sqlserver.jdbc ...

  4. Linux文件系统选择

    通过综合使用多种标准文件系统Benchmarks对Ext3, Ext4, Reiserfs, XFS, JFS, Reiser4的性能测试对比,对不同应用选择合适的文件系统给出以下方案,供大家参考.文 ...

  5. Linux的文件类型

    在Linux中,文件的颜色都是有含义的.其中, Linux中文件名颜色不同,代表文件类型不一样. 浅蓝色:表示链接文件: 灰色:表示其他文件: 绿色:表示可执行文件: 红色:表示压缩文件: 蓝色:表示 ...

  6. I春秋——Misc(贝斯家族)

    不好意思呀!最近一直忙着学习python,竟然忘记更新I春秋里面的题目了(QAQ),我以后会时时刻刻提醒自己要更新 永远爱你们的! ----新宝宝 1:贝斯家族: 解题思路:我相信看见这一题都能够想到 ...

  7. UWP中实现大爆炸效果(二)

    上一回实现了一个宽度不均匀的Panel,这次我们编写一个简单的BigbangView主体. 首先创建一个模板化控件,删掉Themes/Generic.xaml中的<Style TargetTyp ...

  8. Vue中引入bootstrap导致的CSS问题

    最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题. 问题是这样的: 1. 在main.js文件中引入bootstrap的js和css. 2. 自己写了一个Header.v ...

  9. 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法

    一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...

  10. C#-Xamarin的Android项目开发(二)——控件应用

    相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...