SpringBoot 集成MangoDB 入门使用


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;
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值