文档菜单
文档首页
/
MongoDB 手册
/ / /

删除数据库

在本页

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

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

此命令可在以下环境中部署的实例中使用

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

注意

此命令在所有MongoDB Atlas集群中均受支持。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。

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

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

该命令有以下语法

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

该命令包含以下可选字段

字段
描述
writeConcern

可选。一个表示使用大于"majority"的写关注度的文档

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

省略以使用默认/最小写入关注点 "majority".

在副本集上发出时,如果指定的写入关注点导致的成员确认数量少于写入关注点 "majority",则操作使用 "majority"。否则,使用指定的写入关注点。

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

另请参阅 行为。

评论

可选。用户提供的注释,用于附加到此命令。一旦设置,此注释将出现在以下位置记录此命令的记录旁边

评论可以是任何有效的 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() 方法会返回错误。

警告

删除 admin数据库config数据库 可能会使您的集群处于不可用状态。

方法 db.dropDatabase()dropDatabase 会对删除数据库或数据库中的集合上打开的任何 变更流 创建一个 无效化

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

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

提示

另请参阅

返回

删除