![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3087dc302e51be39eb3e8485bba29bbe.png#pic_center)
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0a8bc7bee9d10bc00ecefd191a46fc8.png#pic_center)
依赖引入
<!--mongodb 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- #自动重连-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>mongodb-plus-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
配置操作指定的库:
spring:
data:
mongodb:
auto-index-creation: true
uri: mongodb://exam21244:12348475@192.168.9.164:27017/exam02
field-naming-strategy: org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
#socke超长时间
socketimeout: 2000
#scoke保持活动
sockeKeepAlive: true
#自动连接
autoConnectRetry: true
插入数据:
UserInfo userInfo = new UserInfo();
userInfo.setState(1);
userInfo.setId(null);
userInfo.setOrgId(orgId);
userInfo.setRoleId(roleId);
mongoTemplate.insert(userInfo, "userinfo");
删除数据:
Query query = new Query(Criteria.where("_id").is(id));
DeleteResult userinfo = mongoTemplate.remove(query, UserInfo.class, "userinfo");
if(userinfo.getDeletedCount()==0){
throw new DelException("被删除用户ID不存在");
}
修改数据:
//userInfo 如果有ID则 更新数据 没有ID插入一条新数据
String phone = userInfo.getBasicInfo().getPhone();
String cardId = userInfo.getBasicInfo().getCardId();
if (!SystemUtil.isMobile(phone) || !SystemUtil.isIDNumber(cardId)) {
return ApiData.formatError();
}
//参数一:更新的数据对象, 参数二:更新的表名
mongoTemplate.save(userInfo, "userinfo");
局部修改数据:
//更新条件
Query query = new Query(Criteria.where("_id").is(id));
Update update = new Update();
//更新的位置
/*
update.addToSet("basic_info.card_id", cardId);
addToSet:会报错 Cannot apply $addToSet to non-array field. Field named 'card_id' has non-array type string
原因:addToSet方法需要一个数组
如果是指定条件更新 使用 set方法更好
*/
update.set("basic_info.card_id", cardId);
//参数一:条件 参数二:更新的位置 参数三:更新的表(collection)
UpdateResult result = mongoTemplate.updateFirst(query, update, "userinfo");
// 更新成功后的结果 result.getMatchedCount() = 1 result.getModifiedCount() = 1
查询数据:
UserLogin userLogin = (UserLogin) redisData.get("userLogin"); 根据ID查
return mongoTemplate.findById(userLogin.getUserId(), UserInfo.class, "userinfo");
Query query = new Query(Criteria.where("role_id").is(SysConstant.STUDENT_ROLE));
query.fields().include("_id"); 根据条件查
List<UserInfo> userInfos = mongoTemplate.find(query, UserInfo.class, "userinfo");
Query uf = new Query(Criteria.where("basic_info.card_id").is(cardId).and("basic_info.phone").is(phone));
UserInfo userinfo = mongoTemplate.findOne(uf, UserInfo.class, "userinfo"); 根据条件查
long totalSize = mongoTemplate.count(new Query(), UserInfo.class, "userinfo"); //查总条数
修 改 器
更新修改器是特殊的键,用来指定复杂的更新操作,比如调整,增加或者删除,还可以操作数组和内嵌文档。
1、KaTeX parse error: Expected '}', got 'EOF' at end of input: inc 增加和减少 用法:{inc:{field:value}}对一个数字字段field增加value。
注意:$inc指定的字段必须是数字类型的。
2、$set 与 $unset修改器
用法:{ KaTeX parse error: Expected 'EOF', got '}' at position 25: …ield : value } }̲ 就是相当于sql的set f…set,如果修改的字段不存在,则自动创建。