Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

dropDatabase

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 例子
dropDatabase

dropDatabase命令会删除当前数据库,并删除关联的数据文件。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

所有 MongoDB Atlas 集群都支持此命令。有关所有命令的信息,请参阅不支持的命令

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

该命令具有以下语法:

db.runCommand(
{
dropDatabase: 1,
writeConcern: <document>,
comment: <any>
}
)

该命令采用以下可选字段:

字段
说明
writeConcern

可选。 表达大于 时要使用的 写关注(write"majority" concern) 的文档

{ w: <value>, j: <boolean>, wtimeout: <number> }

省略使用 "majority" 的默认/最小写入关注。

当在副本集上发出时,如果指定的写关注(write concern)导致成员确认少于写关注(write concern)"majority" ,则该操作使用"majority" 。否则,使用指定的写关注(write concern)。

在分片集群上发出时,MongoDB 会将指定的写关注转换为 "majority"

另请参阅行为

comment

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

mongosh 还提供了辅助方法 db.dropDatabase()

该操作仅采用独占 (X) 数据库锁。

该命令不会删除与当前数据库相关联的用户。要删除相关用户,请在要删除的数据库中运行 dropAllUsersFromDatabase 命令。

db.dropDatabase() 方法和 dropDatabase 命令将会先中止在目标数据库中的集合上构建的任何正在进行的索引,然后再丢弃数据库。中止索引构建与删除构建的索引具有相同的效果。

对于副本集或分片副本集,中止主节点上的索引不会同时中止从节点索引构建。MongoDB 尝试中止主节点上指定索引正在进行的构建。如果成功,则会创建关联的 abort oplog 条目。节点如果有正在进行的构建的副本,则在提交或中止索引构建之前会等待来自主节点的提交或中止 oplog 条目。

副本集

dropDatabase 至少需等到数据库中的所有集合删除操作均已传播到大多数副本集成员(即,使用写关注 "majority" )。

如果您指定需要少数人确认的写关注,则该命令使用写关注"majority"

如果您指定需要大多数人确认的写关注(write concern),则该命令将使用指定的写关注(write concern)。

分片集群

在分片集群上发出时,MongoDB 会将指定的写关注转换为 "majority"

如果要创建与已删除数据库同名的新数据库,必须在 mongos 上运行 dropDatabase 命令。

这样可以确保所有集群节点刷新其元数据缓存,其中包括新数据库主分片的位置。否则,您可能会在读取时丢失数据,并且可能无法将数据写入正确的分片。要恢复,您必须手动干预。

从 MongoDB 5.0 开始,如果您尝试从 mongos 删除管理员数据库配置数据库dropDatabase 命令和 db.dropDatabase() 方法会返回错误。

警告

删除管理数据库配置数据库可能会使您的集群处于不可用状态。

db.dropDatabase() 方法和 dropDatabase 会使在已删除的数据库上打开的或在已删除的数据库中的集合上打开的任何变更流失效

以下 mongosh 中的示例使用 use <database> 操作将当前数据库切换到 temp 数据库,然后使用 dropDatabase 命令删除 temp 数据库:

use temp
db.runCommand( { dropDatabase: 1 } )

提示

另请参阅:

后退

删除