定义
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
db.dropDatabase() 方法需要一个可选参数:
字段 | 说明 | |
|---|---|---|
writeConcern | 可选。如果要使用的写关注大于 省略使用 当在副本集上发出时,如果指定的写关注导致成员确认少于写关注 在分片集群上发出时,MongoDB 会将指定的写关注转换为 |
行为
db.dropDatabase() 会封装 dropDatabase 命令。
锁
该操作仅采用独占 (X) 数据库锁。
用户管理
该命令不会删除与当前数据库相关联的用户。要删除相关用户,请在要删除的数据库中运行 dropAllUsersFromDatabase 命令。
索引
db.dropDatabase() 方法和 dropDatabase 命令将会先中止在目标数据库中的集合上构建的任何正在进行的索引,然后再丢弃数据库。中止索引构建与删除构建的索引具有相同的效果。
对于副本集或分片副本集,中止主节点上的索引不会同时中止从节点索引构建。MongoDB 尝试中止主节点上指定索引正在进行的构建。如果成功,则会创建关联的 abort oplog 条目。从节点如果有正在进行的构建的副本,则在提交或中止索引构建之前会等待来自主节点的提交或中止 oplog 条目。
副本集和分片集群
- 副本集
db.dropDatabase()至少需等到数据库中的所有集合删除操作均已传播到大多数副本集节点(即,使用写关注"majority")。您可以为该方法指定写关注。如果您指定需要少数人确认的写关注,则该方法使用写关注
"majority"。如果指定了需要大多数人确认的写关注,此方法将则会使用指定的写关注。
- 分片集群
在分片集群上发出时,MongoDB 会将指定的写关注转换为
"majority"。如果要创建与已删除数据库同名的新数据库,必须在
mongos上运行dropDatabase命令。这样可以确保所有集群节点刷新其元数据缓存,其中包括新数据库主分片的位置。否则,您可能会在读取时丢失数据,并且可能无法将数据写入正确的分片。要恢复,您必须手动干预。
从 MongoDB 5.0 开始,如果尝试从
mongos中删除管理数据库或配置数据库,dropDatabase命令和db.dropDatabase()方法会返回错误。
Change Streams
db.dropDatabase()方法和 dropDatabase 命令为在已删除的数据库上打开或在已删除的数据库中的集合上打开的任何变更流创建失效 。
例子
下面的 mongosh 中的示例使用 use
<database> 操作将当前数据库切换到 temp 数据库,然后使用 db.dropDatabase() 方法删除 temp 数据库:
use temp db.dropDatabase()