springboot整合mongodb批量修改和添加索引,与设置mongodb保存更新超时时间

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());
        }
    }

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

请根据你的具体需求选择合适的配置方式,并根据实际情况调整超时时间。

相关推荐

  1. php获取时间MongoDB保存时间不一致

    2024-01-07 09:42:04       34 阅读
  2. springboot mongodb 数据添加更改‘_class‘字段

    2024-01-07 09:42:04       46 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 09:42:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 09:42:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 09:42:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 09:42:04       20 阅读

热门阅读

  1. Python使用函数求素数和

    2024-01-07 09:42:04       36 阅读
  2. 详解Nacos和Eureka的区别

    2024-01-07 09:42:04       28 阅读
  3. SpringBoot-拓展

    2024-01-07 09:42:04       37 阅读
  4. cocos2d-x lua ProgressTimer

    2024-01-07 09:42:04       41 阅读
  5. C++中的 greate/less 比较器模板的实现原理及作用

    2024-01-07 09:42:04       35 阅读
  6. 普通BUG

    普通BUG

    2024-01-07 09:42:04      32 阅读
  7. 记一个集群环境部署不完整导致的BUG

    2024-01-07 09:42:04       41 阅读
  8. LeetCode2807. Insert Greatest Common Divisors in Linked List

    2024-01-07 09:42:04       32 阅读
  9. HDU 2841:Visible Trees ← 容斥原理

    2024-01-07 09:42:04       42 阅读
  10. 【PHP】TP5使用orderRaw 方法设置排序规则

    2024-01-07 09:42:04       39 阅读
  11. 轮转数组【数组】

    2024-01-07 09:42:04       46 阅读