文章目录
SpringBoot 集成MangoDB 简单使用
一、 前期准备
1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2、创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("modify_task")
public class ModifyTask implements Serializable {
/**
* 任务Id
*/
@Field("task_id")
private String taskId;
/**
* 时间
*/
@Field("date")
private String date;
/*
* 日志信息
*/
@Field("msg")
private String msg;
}
二、使用MangoTemplate对于对象进行CRUD
1、添加操作 save() 或insert()
@Transactional
public void insertTaskLog(ModifyTask modifyTask) {
ModifyTask modifyTask1 = new ModifyTask(IDUtils.randomUUID(), DateUtil.today(), "添加操作");
mongoTemplate.save(modifyTask1);
//mongoTemplate.insert(modifyTask1);
}
区别
插入重复数据
insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException
异常提示主键重复,不保存当前数据。
save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
批操作
insert: 可以一次性插入一整个列表,而不用进行遍历操作,效率相对较高
save: 需要遍历列表,进行一个个的插入
2、修改操作
MongodbTemplage.update(Query var1, Update var2, Class<?> var3)
MongodbTemplage.updateFirst(Query var1, Update var2, Class<?> var3)
这两个不同点之处,是updateFirst只修改查到的第一个。
参数解释:
Query var1 :传入的查询条件,按此条件进行修改
Update var2 : 修改数据,或者说修改属性值
Class<?> var3 : 所对应的实体类。
用法:
Query query = new Query(Criteria.where("dataSetId").is(1));
Update update = new Update().set("msg", "修改");
mongoTemplate.upsert(query, update, ModifyTask.class);
3、删除操作
MongodbTemplage.remove(Query query, Class<?> entityClass)
用法:
Query query = new Query(Criteria.where("dataSetId").is("1"));
mongoTemplate.remove(query, ModifyTask.class);
4、查询操作
4.1 常用查询
4.1.1 精准查询
多条件下,往后添加.add()
// is 精准匹配
mongoTemplate.findOne(new Query(Criteria.where("url").is(url)),ModifyTask.class);
4.1.2 模糊查询
public long getProcessLandLogsCount(List<Condition> conditions)
{
Query query = new Query();
if (conditions != null && conditions.size() > 0) {
for (Condition condition : conditions) {
query.addCriteria(Criteria.where(condition.getKey()).regex(".*?\\" +condition.getValue().toString()+ ".*"));
}
}
return count(query, ModifyTask.class);
}
4.1.3 区间查询
gt(): 大于 , gte(): 大于等于 , lt(): 小于 , lte: 小于等于
使用 hutool 的 DateUtil 对字符串 startTime 进行 偏移操作
criteria.and("date").gte(startTime)
.lt(DateUtil.format(DateUtil.offsetSecond(DateUtil.parse(startTime), 5), "yyyy-MM-dd HH:mm:ss"));
4.1.4 排序、分页、字段过滤
query.fields().include("date").include("msg");
query.with(Sort.by(Sort.Order.asc("date")));
Pageable pageable = PageRequest.of(0, 3000);
query.with(pageable);
三、使用MangoTemplate无对象进行操作
因为业务上的需求,没有实体类,动态的去创建索引
3.1、创建索引并指定字段名
mongoTemplate.getCollection("索引名称"); 获取指定索引 , 如果该索引不存在则创建
collection.insertMany(); 添加的类型为Document 类型
Document document = new Document();
document.append("_id", IDUtils.randomUUID()).append("url", "www,baidu.com").append("msg", "添加");
MongoCollection<Document> collection = mongoTemplate.getCollection(collectionName);
collection.insertMany(document);
3.2、获取指定集合的字段名
collection.find().first(); 获取第一行的文档
public List<String> columnNameList(String collectionName) {
MongoCollection<Document> collection = mongoTemplate.getCollection(collectionName);
Document document = collection.find().first();
List<String> fieldNameList = new ArrayList<>();
for (String name : document.keySet()) {
if (!name.equals("_id")) {
fieldNameList.add(name);
}
}
return fieldNameList;
}