Docs 菜单

Docs 主页开发应用程序MongoDB Manual

db.dropDatabase()

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 例子
db.dropDatabase(<writeConcern>)

删除当前数据库,会删除关联的数据文件。

可以使用 db.dropDatabase() 查找托管在以下环境中的部署:

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

db.dropDatabase()方法接受一个可选参数:

字段
说明
writeConcern

可选。如果要使用的写关注大于 "majority",则为代表该写关注的文档。

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

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

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

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

另请参阅行为。

4.2 版本中的新增功能

db.dropDatabase()封装了dropDatabase命令。

从版本 4.2.2 开始,该操作仅采用独占 (X) 数据库锁。

在版本 3.6-4.2.1 中,该操作在删除数据库中的集合时采用独占 (X) 数据库锁,但在删除现在为空的数据库时采用全局锁。

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

在删除数据库之前, db.dropDatabase()方法和dropDatabase命令会中止任何正在进行的基于目标数据库中集合的索引构建。中止索引构建与删除构建的索引具有相同的效果。

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

副本集

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

从 MongoDB 4.2 开始,您可以为方法指定写关注(write concern)。如果您指定需要少数人确认的写关注(write concern),则该方法使用写关注(write concern)"majority"

如果指定的写关注(write concern)需要多数成员确认,则该方法将使用指定的写关注(write concern)。

分片集群

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

如果打算创建与已删除的数据库同名的新数据库,则必须按照以下附加步骤使用 dropDatabase 命令(特定于您的 MongoDB 版本):

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

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

警告

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

db.dropDatabase()方法和 命令为在已删除的数据库上打开或在已删除的数据库中的集合上打开的任何dropDatabase 变更流 创建 无效 。

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

use temp
db.dropDatabase()

提示

另请参阅:

← db.currentOp()