springboot~mongo内嵌集合的操作
对于mongodb的内嵌对象的各种操作大叔在.net平台时已经说过,同时大叔也自己封装过mongo的仓储,使用也都很方便,而在java springboot框架里当然也有对应的方法,下面主要说一下,希望对刚接触mongodb的同学有所帮助!
一 测试DEMO的数据结构
- /**
- * 地址.
- */
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class Address {
- /**
- * 编号.
- */
- @Id
- private String id;
- /**
- * 省.
- */
- private String province;
- /**
- * 市.
- */
- private String city;
- /**
- * 区.
- */
- private String district;
- /**
- * 状态.
- */
- private Status status;
- /**
- * 扩展.
- */
- private List<AddressExtension> addressExtension;
- }
其中它有一个内嵌的集合对象,addressExtension,我们添加了一些测试数据,如图:
下面介绍几种常用的数据操作:
- /**
- * 获取数据.
- *
- * @param province 省
- * @param city 市
- * @return
- */
- @Override
- public Address findByProvinceAndCity(String province, String city) {
- Query query = new Query(Criteria.where("province").is(province).and("city").is(city));
- return mongoTemplate.findOne(query, Address.class, "address");
- }
- /**
- * 更新字段.
- *
- * @param address .
- */
- @Override
- public void updateCity(Address address) {
- Query query = new Query(Criteria.where("_id").is(address.getId()));
- Update update = Update.update("city", address.getCity());
- mongoTemplate.upsert(query, update, Address.class);
- }
- /**
- * 添加内嵌文档中的数据.
- *
- * @param id .
- * @param info .
- */
- @Override
- public void addAddressInfo(String id, String info) {
- Query query = Query.query(Criteria.where("_id").is(id));
- AddressExtension ext = new AddressExtension();
- ext.setInfo(info);
- Update update = new Update();//update.push("Students", student);
- // addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据
- update.addToSet("addressExtension", ext);
- mongoTemplate.upsert(query, update, Address.class);
- }
- /**
- * 更新内嵌文档里某条元素
- *
- * @param oldInfo
- * @param newInfo
- */
- @Override
- public void updateAddressInfo(String oldInfo, String newInfo) {
- Query query = new Query(Criteria.where("addressExtension.info").is(oldInfo));
- Update update = new Update();
- update.set("addressExtension.$.info", newInfo);
- mongoTemplate.upsert(query, update, Address.class);
- }
- /**
- * lambda filter.
- * @param list
- * @param predicate
- * @return
- */
- public List<AddressExtension> conditionFilter(List<AddressExtension> list, Predicate<AddressExtension> predicate){
- return list.stream().filter(predicate).collect(Collectors.toList());
- }
- /**
- * 删除内嵌文档中的数据.
- *
- * @param id .
- * @param addressExtension .
- */
- @Override
- public void delAddressInfo(String id, AddressExtension addressExtension) {
- Query query = Query.query(Criteria.where("_id").is(id));
- Update update = new Update();
- update.pull("addressExtension", addressExtension);
- mongoTemplate.updateFirst(query, update, Address.class);
- }
- /**
- * 删除文档.
- *
- * @param id .
- */
- @Override
- public void delAddress(String id) {
- Query query = Query.query(Criteria.where("_id").is(id));
- mongoTemplate.remove(query, Address.class);
- }
其中,更新内嵌集合比较特别,它使用了集合元素的下标进行更新,$就是表示当前要更新的元素的下标!
感谢阅读!
springboot~mongo内嵌集合的操作的更多相关文章
- 补习系列(17)-springboot mongodb 内嵌数据库
目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...
- 补习系列(17)-springboot mongodb 内嵌数据库【华为云技术分享】
目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...
- SpringBoot优化内嵌的Tomcat
SpringBoot测试版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId ...
- MongoDB内嵌文档操作
实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...
- springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤
去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...
- SpringBoot Boot内嵌Tomcat
Spring Boot: SpringBoot-start-web 里面依赖的环境中 如果是外部的Tomcat 容器,可以通过修改config进行配置 内嵌的呢? 如何定制和修改Servlet容器的相 ...
- SpringBoot 优化内嵌的Tomcat
在通过SpringBoot调用其它服务时,报错 org.springframework.web.client.ResourceAccessException: I/O error on POST re ...
- SpringBoot优化内嵌的Tomcat ---设置MaxConnections
使用kill -9杀掉springboot应用后,立马java -jar重启,会报错,需要等待一段时间才能启动成功,报错的原因是:/tmp/tomcat-docbase.474979491043437 ...
- springBoot定制内嵌的Tomcat
此篇仅介绍配置方式,详细配置内容百度查阅 工程结构: 可以通过配置的方式设置参数,如下 application.properties #配置tomcat端口 # server.port= 8888 # ...
随机推荐
- Java 学习笔记 (五) Java Compile\Build\Make的区别
以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...
- client.go
package)*time.Second) ], { hasConn := false waitc := time.After(cfg.DialTimeout) ...
- Java 链接SQL Server 数据库
1 //Java 连接 SQL Server数据库 2 public static final String DRIVERNAME="com.microsoft.sqlserver.jdbc ...
- Linux文件系统选择
通过综合使用多种标准文件系统Benchmarks对Ext3, Ext4, Reiserfs, XFS, JFS, Reiser4的性能测试对比,对不同应用选择合适的文件系统给出以下方案,供大家参考.文 ...
- Linux的文件类型
在Linux中,文件的颜色都是有含义的.其中, Linux中文件名颜色不同,代表文件类型不一样. 浅蓝色:表示链接文件: 灰色:表示其他文件: 绿色:表示可执行文件: 红色:表示压缩文件: 蓝色:表示 ...
- I春秋——Misc(贝斯家族)
不好意思呀!最近一直忙着学习python,竟然忘记更新I春秋里面的题目了(QAQ),我以后会时时刻刻提醒自己要更新 永远爱你们的! ----新宝宝 1:贝斯家族: 解题思路:我相信看见这一题都能够想到 ...
- UWP中实现大爆炸效果(二)
上一回实现了一个宽度不均匀的Panel,这次我们编写一个简单的BigbangView主体. 首先创建一个模板化控件,删掉Themes/Generic.xaml中的<Style TargetTyp ...
- Vue中引入bootstrap导致的CSS问题
最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题. 问题是这样的: 1. 在main.js文件中引入bootstrap的js和css. 2. 自己写了一个Header.v ...
- 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法
一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...
- C#-Xamarin的Android项目开发(二)——控件应用
相信我,这不是一篇吐槽文章.... 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计.... 但在这种特别的关系里还是有一定的规律的,下面我们 ...