删除数据库
定义
dropDatabase
的
dropDatabase
命令删除当前数据库,并删除相关数据文件。
兼容性
此命令可在以下环境中部署的实例中使用
MongoDB Atlas:云中MongoDB部署的完全托管服务
注意
此命令在所有MongoDB Atlas集群中均受支持。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅的、自我管理的MongoDB版本
MongoDB Community:源代码可用的、免费使用并可自我管理的MongoDB版本
语法
该命令有以下语法
db.runCommand( { dropDatabase: 1, writeConcern: <document>, comment: <any> } )
命令字段
该命令包含以下可选字段
字段 | 描述 | |
---|---|---|
writeConcern | 可选。一个表示使用大于
省略以使用默认/最小写入关注点 在副本集上发出时,如果指定的写入关注点导致的成员确认数量少于写入关注点 在分片集群上发出时,MongoDB 将指定的 写入关注点 转换为 另请参阅 行为。 | |
评论 | 可选。用户提供的注释,用于附加到此命令。一旦设置,此注释将出现在以下位置记录此命令的记录旁边
评论可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。 |
mongosh
还提供了辅助方法 db.dropDatabase()
。
行为
锁
此操作仅获取排他(X)数据库锁。
用户管理
此命令不会删除与当前数据库关联的用户。要删除关联的用户,请在您要删除的数据库中运行dropAllUsersFromDatabase
命令。
索引
db.dropDatabase()
方法和dropDatabase
命令在删除数据库之前会中止目标数据库中集合的索引构建。中止索引构建的效果与删除已构建的索引相同。
对于副本集或分片副本集,在主节点上终止索引操作并不会同时终止辅助索引的构建。MongoDB会尝试终止主节点上指定索引的进行中的构建,如果成功,则会创建一个相关的终止
操作日志oplog
条目。《主节点》的辅助成员在等待主节点的提交或终止操作日志条目到来之前,会暂停提交或终止索引构建。
副本集和分片集群
- 副本集
至少,
dropDatabase
命令会等待数据库中所有集合的删除操作传播到副本集多数成员(即使用写入关注"majority"
)。如果您指定的写入关注需要从少于多数的成员处获得确认,则命令使用写入关注
"majority"
。如果您指定的写入关注需要从多数以上的成员处获得确认,则命令使用指定的写入关注。
- 分片集群
在分片集群上发出时,MongoDB 将指定的 写入关注点 转换为
"majority"
。如果您打算创建一个与已删除数据库具有相同名称的新数据库,则必须在
mongos
上运行dropDatabase
命令。这确保了所有集群节点刷新其元数据缓存,包括新数据库的 主分片 的位置。否则,您可能在读取时错过数据,并且可能无法将数据写入正确的分片。要恢复,您必须手动干预。
从MongoDB 5.0开始,当您尝试从
mongos
中删除 admin数据库 或 config数据库 时,dropDatabase
命令和db.dropDatabase()
方法会返回错误。
变更流
方法 db.dropDatabase()
和 dropDatabase
会对删除数据库或数据库中的集合上打开的任何 变更流 创建一个 无效化。
示例
以下示例使用 mongosh
,使用 use <database>
操作将当前数据库切换到 temp
数据库,然后使用 dropDatabase
命令删除 temp
数据库。
use temp db.runCommand( { dropDatabase: 1 } )