日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

springboot整合mongodb批量修改和添加索引,與設置mongodb保存更新超時時間

作者:小徐敲java 更新時間: 2024-04-04 編程語言

1:創建字段索引

collection 是集合名稱,keys 是一個包含一個或多個字段名,options是排序方向,1正序,-1倒敘

db.collection.createIndex(keys, options)
#單字段
db.collection.createIndex(name: 1)
#多字段
db.collection.createIndex{name: 1, age: -1}

2:mongodb批量修改

BulkOperations bulkOperations = mongoTemplate.bulkOps(BulkMode.UNORDERED, RealtimeEntity.class);

updateList.forEach(realtimeEntity -> {
    Query query = new Query(Criteria.where("pn").is(realtimeEntity.getPn()));
    Update update = new Update()
            .set("pnVal", realtimeEntity.getPnVal())
            .set("tm", realtimeEntity.getTm())
            .set("rm", realtimeEntity.getRm());

    bulkOperations.updateOne(query, update);
});
bulkOperations.execute();

注意:必須創建索引這樣更新的效率快

3:mongodb保存的時候最好設置一個保存超時時間,因為mongodb本身沒有設置保存或者更新超時拋出異常

	public void saveWithTimeout(Object objectToSave, String collectionName) {
        CompletableFuture<Void> completableFuture = new CompletableFuture<>();
        
        mongoTemplate.insert(objectToSave, collectionName).addCallback(
            result -> completableFuture.complete(null),
            ex -> completableFuture.completeExceptionally(ex)
        );
        
        try {
            completableFuture.get(10, TimeUnit.SECONDS);
        } catch (TimeoutException e) {
            // 超時處理邏輯,例如拋出異常或記錄日志
            throw new RuntimeException("保存超時");
        } catch (InterruptedException | ExecutionException e) {
            // 異常處理邏輯
            throw new RuntimeException("保存失敗:" + e.getMessage());
        }
    }

3-1:mongoTemplate通過id主機查詢,需要設置主機類型為objectId不然通過主機查不出來數據,或者在數據庫添加字段_id類型為sting覆蓋本身的自帶的objectId類型

4:在Spring Boot中,你可以通過在application.yml或application.properties文件中設置相關屬性來配置MongoDB的保存和更新操作的超時時間。

下面是在application.yml文件中配置MongoDB超時時間的示例:

spring:
  data:
    mongodb:
      write-concern:
        w: majority
        wtimeout: 10000

在上述示例中,w: majority表示寫操作需要大多數節點確認,wtimeout: 10000表示寫操作的超時時間為10秒。

如果你只想設置保存操作的超時時間,可以使用以下配置:

spring:
  data:
    mongodb:
      write-concern:
        wtimeout: 10000

同樣地,如果你只想設置更新操作的超時時間,可以使用以下配置:

spring:
  data:
    mongodb:
      update-timeout: 10000

mongodb開啟自動創建唯一索引@Indexed(unique = true)

spring: 
    data: 
        mognodb: 
            auto-index-creation: true

請根據你的具體需求選擇合適的配置方式,并根據實際情況調整超時時間。

原文鏈接:https://blog.csdn.net/qq_19891197/article/details/135368858

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新