如何在Spring Boot中用MongoTemplate执行MongoDB compact命令?
如何在Spring Boot中通过MongoTemplate执行MongoDB的compact命令?
已知Mongo Shell执行compact命令的语法为:
db.runCommand({compact: <collection name>})如何在Spring Boot项目中使用MongoTemplate执行该命令?尝试过以下代码,但
executeCommand方法仅支持JSON格式的命令:@Autowired private MongoTemplate mongoTemplate; ... mongoTemplate.executeCommand(jsonCommand); ...
解决方案
方法1:拼接JSON字符串直接执行
把compact命令转成合法的JSON字符串,直接传入executeCommand方法即可:
@Autowired private MongoTemplate mongoTemplate; public void compactTargetCollection(String collectionName) { // 构造符合要求的JSON命令 String compactCmd = String.format("{\"compact\": \"%s\"}", collectionName); // 执行compact命令 mongoTemplate.executeCommand(compactCmd); }
方法2:用Document对象构造命令
如果不想手动拼接JSON字符串,可以借助MongoDB的Document类来构建命令,executeCommand同样支持接收Document类型的参数:
import org.bson.Document; @Autowired private MongoTemplate mongoTemplate; public void compactTargetCollection(String collectionName) { Document compactCmd = new Document("compact", collectionName); mongoTemplate.executeCommand(compactCmd); }
重要注意事项
- compact执行时会锁定目标集合,期间该集合无法处理写入请求,务必在业务低峰期操作
- 只有当集合存在大量已删除文档(有较多空闲预留空间)时,执行compact才会有明显的空间回收效果
- 避免在副本集主节点频繁执行该命令,可考虑在从节点执行完成后再切换角色,减少对业务的影响
内容的提问来源于stack exchange,提问作者LuMa
相关产品推荐
相关产品推荐

