前言:厌倦了关系的数据库Mysql,拿NOSql尝尝味道。本篇主要内容是如何引入MongoDB maven库、配置文件、使用、存储、查询。好了,人狠话不多,直接开工喽。
SpringBoot 2.2.2.RELEASE pom.xml 引入Mongodb maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
清晰明了,简单方便
application.yml配置文件
spring:
data:
mongodb:
uri: mongodb://用户名:密码@地址:端口号/库名
yml看起来确实清爽
MongoTemplate 操作MongoDB
//引入MongoTemplate
@Autowired
private MongoTemplate mongoTemplate;
查询
//按ID查询
//建立Query对象
Query query = new Query();
//因为mongodbr的自带id是一组十六进制,所以针对过来的字段串ID,需要做一次转换
query.addCriteria(Criteria.where("_id").is(new ObjectId(recordId)));
//将查询的结果,映射为TemplateData实体类
TemplateData templateData = mongoTemplate.findOne(query, TemplateData.class);
添加、更新
//添加
templateData.setCreateTime(DateUtil.date());
templateData.setUpdateTime(null);
mongoTemplate.save(templateData);
//更新 通过mongo id进行更新
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(new ObjectId(recordId)));
//构建更新需要使用的对象
Update update = new Update();
update.set("data", templateData.getData());
update.set("updateTime", DateUtil.date());
//UpdateResult 返回更新的结果对象也叫返回上次写入的结果
//updateFirst 如果更新的时候发现是集合则更新第一个
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, TemplateData.class);
删除、多条件
//删除 通过mongo id和userId 删除记录
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(new ObjectId(recordId)));
query.addCriteria(Criteria.where("userId").is(userId));
//DeleteResult 删除的结果
DeleteResult deleteResult = mongoTemplate.remove(query, TemplateData.class);
其它构造查询条件说明
//不等于
criteria.ne(cond.getValue());
//模糊查询
criteria.regex("/" + cond.getValue() + "/");
//区间查询
if (cond.getValue() instanceof List) {
criteria.lte(((List) cond.getValue()).get(1)).gte(((List) cond.getValue()).get(0));
}
//in查询
criteria.in(cond.getValue());
//小于等于
criteria.lte(cond.getValue());
//大于等于
criteria.gte(cond.getValue());
更多条件请去mongodb官方网站查询,本次提供了一些基本常用的条件
关于存储需要提醒大家
如果存储的内容为JSON,请一定要转为JSON或者Map或者JSONObject类似这种类型,否则入库之后
"data":"{\"ttt\":\"tttt\"}"
这时候再通过:data.ttt是查询不到
#正确格式
"data":{
"ttt":"tttt"
}