四时宝库

程序员的知识宝库

【SpringBoot】MongoDB常规配置及使用操作和注意事项

前言:厌倦了关系的数据库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"
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接