SpringBoot整合 mongoDB业务操作介绍

前言

背景

​ 入职新公司使用的mongoDB,目前个人情况是会使用mongoDB去做业务操作,使用整合好的MongoTemplate类去进行常见的操作,随来深入学习下加深自己的理解, 学习下操作方法,后续再更新mongo背景及相关细节配置

​ 操作一共分为三个部分 新增/更新 删除 查询 其中 查询是重点,因为我们使用了Spring整合 mongodb,

​ 在使用的时候会去自动执行新建表及插入数据的操作,不需要我们手动的去创建表及对应的数据,再加上能

​ 存上数据库的文件很少会去涉及删除这个概念,改也很少,具体在查询处介绍Criteria对应的方法列表,及对应类型对照表

依赖如下:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

具体的配置及相关引用可以找网上的文章操作 连接工具推荐使用Navicat15 MongoDB版使用,可以查看多种视图json,文档,树等,还有各种操作优化等

增删改查操作

一 最简单的更新及插入操作

插入
Map data = new HashMap();
data.put("name","xxxx");
data.put("sex","yyyy");
data.put("date",new Date());
mongoTemplate.insert(data,"why");  //why为表名
更新

更新的具体操作等到后面查询再去叙述.思路是将查询出来的数据和要修改的数据进行匹配修改

criteria就是将查询条件进行组装 , and 就是组装 key is 就是对应value="";

Criteria criteria = new Criteria();
criteria.and("date").is("yyyy-MM-dd hh:MM:ss");
Query query=new Query();
Update update = Update.update("name","xxx").set("sex","yyy");
mongoTemplate.updateFirst(query, update, Map.class,"why");

二 最简单的删除操作

这里的Criteria.where意思和上面的criteria是相同的,不过一个是Criteria方法提供的静态方法,一个是内部公共方法

Criteria where = Criteria.where("date").is("yyyy-MM-dd hh:MM:ss")
Query query = new Query(where);
long count = mongoTemplate.remove(query,Map.class,"why").getDeletedCount();

三 最简单的查询操作

​ 项目中使用Criteria来做mongo条件的拼接,所以在Dao层使用Criteria组装查询条件,作为参数创建查询Query对象,最后调用mongoTemplate的find()方法

  Criteria criteria = new Criteria(); //1 
     criteria.and("plate_no").is(plateNo);
     Query query = new Query(criteria);  //2
     return mongoTemplate.find(query,T.class, 
                       T.collectionName(startDate));  //3 
Criteria类
官方介绍
>Central class for creating queries. It follows a fluent API style so that you can easily chain together multiple criteria. Static import of the 'Criteria.where' method will improve readability.
>
> 用于创建查询的中央类。它遵循流利的API风格,因此您可以轻松地将多个条件链接在一起。静态导入“ Criteria.where”方法将提高可读性

​ 可以看到Criteria类的功能就是用来把我们的条件进行拼接,进行组装存储到Criteria这个类中

Criteria的底层方法
	private @Nullable String key;
	private List<Criteria> criteriaChain;  //定义criteriaChain 集合
	private LinkedHashMap<String, Object> criteria = new LinkedHashMap<String, Object>();
	//定义criteriaMap 	
	private @Nullable Object isValue = NOT_SET;//赋予一个初值
//~~~~~~~~~~~
/**
 * 构造方法  相当于List<Criteria> criteriaChain =new ArrayList<Criteria>();
 */
public Criteria() {
		this.criteriaChain = new ArrayList<Criteria>(); //创建一个集合 泛型为Criteria  
	}
	//具体如下所示

Criteria类

Criteria的方法表如下:

Criteria方法对应表

权限方法名参数参数释义参数限制返回值作用代码
publicwhereString key参数的key允许为空Criteria把多个条件组合在一起-
publicandString key参数的key允许为空Criteria标准查询拼接new Criteria(this.criteriaChain, key);
publicisObject o参数的value允许为空Criteria标准等值方法this.isValue = o;
privatelastOperatorWasNot---boolean用于方法内部判断判断criteria为空或者$not操作符在最后
publicneObject o参数的value允许为空Criteria不等于 ocriteria.put("$ne", o);
publicltObject o参数的value不允许为空Criteria小于 ocriteria.put("$lt", o);
publiclteObject o参数的value不允许为空Criteria小于等于 ocriteria.put("$lte", o);
publicgtObject o参数的value不允许为空Criteria大于ocriteria.put("$gt", o);
publicgteObject o参数的value不允许为空Criteria大于等于 ocriteria.put("$gte", o);
publicinObject o参数的value不允许为空且必须为同一类型Criteria在 o 里criteria.put("$in", Arrays.asList(o));
publicinCollection<?> c参数的value不允许为nullCriteria在 o 里criteria.put("$in", c);
publicninObject… o参数的value不允许为空Criteria不在 o 里nin(Arrays.asList(o));
publicninCollection<?> c参数的value不允许为nullCriteria不在 o 里criteria.put("$nin", o);
publicmodNumber value, Number remaindervalue 操作数 remainder 余值不允许为null且必须为数字型Criteria取模,高级查询List l = new ArrayList(); l.add(value); l.add(remainder); criteria.put("$mod", l);
publicallObject… o参数的value不允许为空Criteria全匹配,高级查询,不同于in,必须所有符合规则才可以all(Arrays.asList(o));
publicallCollection<?> o参数的value不允许为空Criteria全匹配,高级查询,不同于in,必须所有符合规则才可以criteria.put("$all", o);
publicsizeint s参数的value不允许为空Criteria查找数组元素个数criteria.put("$size", s);
publicexistsboolean btrue/false不允许为空Criteria1.当boolean为true,匹配包含字段的文档,包括字段值为null的文档。 2.当boolean为false,返回不包含对应字段的文档。criteria.put("$exists", b);
publictypeint t类型的对应数字不允许为空Criteria基于类型返回结果,具体类型对应如下表格criteria.put("$type", t);
publicnot---Criteriareturn not(null)
privatenotObject value参数的value允许为空Criteria私有方法,用于判断不是criteria.put("$not", value);
publicregexString re正则匹配不允许为空Criteria设置正则匹配,option为空-
publicregexString re, String options正则匹配options允许为空Criteria设置正则匹配,re及optionreturn regex(toPattern(re, options));
publicregexPattern patternPattern类不允许为空Criteria设置正则匹规则配,Pattern规则if (lastOperatorWasNot()) { return not(pattern); } this.isValue = pattern; return this;
publicregexBsonRegularExpression regexBsonRegularExpression类 内包括(re,options)不允许为空Criteria设置正则匹配 规则this.isValue = regex;
privatetoPatternString regex, String options正则匹配options允许为空Criteria设置正则匹配规则Pattern.compile(regex, options == null ? 0 : BSON.regexFlags(options));
publicwithinSphereCircle circle中心圆及半径不允许为nullCriteria空间查询在范围内criteria.put("$geoWithin", new GeoCommand(new Sphere(circle)));
publicwithinShape shape所有的图形类不允许为nullCriteria空间查询在范围内criteria.put("$geoWithin", new GeoCommand(shape));
publicnearPoint point坐标点 x,y不允许为nullCriteria地理查询接近criteria.put("$near", point);
publicnearSpherePoint point坐标点 x,y不允许为nullCriteria球面几何计算$nearSphere 的距离criteria.put("$nearSphere", point);
publicintersectsGeoJson geoJsonGeoJson格式定义的结构不允许为nullCriteria根据GeoJson检索位置criteria.put("$geoIntersects", geoJson);
publicmaxDistancedouble maxDistance最大距离不允许为nullCriteria根据最大距离匹配if (createNearCriteriaForCommand(“ n e a r " , " near", " near","maxDistance”, maxDistance) || createNearCriteriaForCommand(“ n e a r S p h e r e " , " nearSphere", " nearSphere","maxDistance”, maxDistance)) { return this; } criteria.put("$maxDistance", maxDistance);
publicminDistancedouble minDistance最小距离不允许为nullCriteria根据最小距离匹配同上 criteria.put("$minDistance", minDistance);
publicelemMatchCriteria c匹配的内嵌文档不允许为nullCriteria包含数组字段的文档与至少一个匹配所有指定查询条件的元素进行匹配criteria.put("$elemMatch", c.getCriteriaObject());
publicalikeExample<?> sample示例不支持嵌套或者分组.不支持字符串的开始、包含、结束和正则表达式匹配Criteria示例查询criteria.put("$example", sample);
publicorOperatorCriteria… criteria文档不允许为nullCriteria使用or运算符为所有提供的条件创建一个“ or”条件 or 多查询BasicDBList bsonList = createCriteriaList(criteria); return registerCriteriaChainElement(new Criteria("$or").is(bsonList));
publicnorOperatorCriteria… criteria文档不允许为nullCriteria使用nor运算符为所有提供的条件创建一个“ nor”条件 nor 多查询BasicDBList bsonList = createCriteriaList(criteria); return registerCriteriaChainElement(new Criteria("$nor").is(bsonList));
publicandOperatorCriteria… criteria文档不允许为nullCriteria使用and运算符为所有提供的条件创建一个“ and”条件and 多查询BasicDBList bsonList = createCriteriaList(criteria); return registerCriteriaChainElement(new Criteria("$and").is(bsonList));

方法基本上差不多这些,但是具体的组合很多,根据根据业务需求尝试,复杂查询的操作需要用template提供的方法对象具体去使用

MongoDB类型对照表 来源: 菜鸟教程mongodb
类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127

​ 可以看到 crriteriaChain里面存储了我们添加的查询条件 因为是is相等条件,所以返回isValue=“黑AJ72J3”,这是一个最简单的查询

Query类
赋值给Query,这个样子一个简单的查询就完成了
Query: { "plate_no" : "黑AJ72J3" }, Fields: { }, Sort: { }
MongoTemplate类

方法比较多,但是基本上我们需要操作的方法就5类

1. save()方法    //save 保存或更新
2. delete() 方法 //delete 删除操作
3. get() 方法    //get  操作
4.  find() 方法  //find() 查找
5. collectionExists()方法   //判断文档是否存在

mongoTemplate方法总结

​ 思路上也和我们操作SQL一样,两者有很多的共同点,因为是查询模块所以主要使用find方法

整理基本大致查询操作
Criteria criteria = new Criteria(); //创建Criteria类 作为条件 
//--------------------组装criteria查询条件---------------------
Query query = new Query(criteria);  //将criteria对象作为参数创建查询对象
//	根据具体的需求去确认查询条件 得到结果集
List<DvsGps> dvsGpsList = super.find(query, DvsGps.class, DvsGps.collectionName(new Date()));

结束

这篇主要是将mongoTemplate的业务操作,会缺少mongo的原生Sql和mongo的背景及场景,后续再进行补充,目前先这样了.会操作使用为主.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值