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 # ...
随机推荐
- Python读取文件时输入文件绝对路径报错
问题描述 读取本地文件,输入绝对路径时出错,显示数据被截断. 最开始以为是转译错误,因为eclipse会自动把\变成\\, pycharm这里没有,就手动改一下.结果还是不行. 根本原因 文件名出错了 ...
- bolt_storage.go
package, * time.Second}) if err != nil { return nil, err } err = db.Update(func( ...
- bzoj 2500 幸福的道路 树上直径+set
首先明确:树上任意一点的最长路径一定是直径的某一端点. 所以先找出直径,求出最长路径,然后再求波动值<=m的最长区间 #include<cstdio> #include<cst ...
- BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理
BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理 题意: ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种 ...
- BZOJ_2792_[Poi2012]Well_二分答案
BZOJ_2792_[Poi2012]Well_二分答案 Description 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某 ...
- AngularJs parent index
AngualrJs ng-repeat使用 $parent.$index 当时用ng-repeat的时候在其子原属中可以使用$parent.$index获取父级下标,当没有没有多一级的ng-if,一般 ...
- C# WinForm ShowInTaskbar Api Version
using System; using System.Runtime.InteropServices; namespace x { unsafe class NativeWindow { /* * W ...
- 测试修改hosts文件py小工具
import sys,osparm_list=sys.argvHOST_PATH=r'C:\liuliang\flask_test\test\hosts'class HostFile(object): ...
- 【SAP业务模式】之STO(二):系统配置
本篇博文开始讲述STO业务模式的配置! 一.定义发货工厂的装运数据: 目录:SPRO-物料管理-采购-采购订单-设置库存调拨订单-定义工厂的装运数据 定义发货工厂的装运数据: 为收货工厂分配客户代码: ...
- Netty基础系列(1) --linux网路I/O模型
引言 我一直认为对于java的学习,掌握基础的性价比要远远高于使用框架,而基础知识中对于网络相关知识的掌握也是重中之重.对于一个java程序来说,无论是工作中还是面试,对于Netty的掌握都是及其重要 ...