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
请根据你的具体需求选择合适的配置方式,并根据实际情况调整超时时间。