Docs 主页 → 开发应用程序 → MongoDB Manual
db.collection.drop()
定义
db.collection.drop(<options>)
重要
mongosh 方法
本页介绍了
mongosh
方法。这不是数据库命令或特定语言驱动程序(例如 Node.js)的文档。有关数据库命令,请参阅
drop
命令。对于 MongoDB API 驱动程序,请参阅特定语言的MongoDB 驱动程序文档。
对于传统
mongo
Shell 文档,请参阅相应 MongoDB Server 版本的文档:从数据库中删除集合或视图。该方法还会删除与删除的集合关联的任何索引。该方法为
drop
命令提供了一个包装器。返回: true
成功删除集合时返回 true。false
(当要删除的集合不存在时)。
注意
对分片集群运行时,db.collection.drop()
始终返回 true
。
兼容性
可以使用 db.collection.drop()
查找托管在以下环境中的部署:
MongoDB Atlas :用于在云中部署 MongoDB 的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
drop()
方法采用以下形式:
db.collection.drop( { writeConcern: <document> } )
drop()
方法接受带有以下字段的可选文档:
字段 | 说明 |
---|---|
writeConcern | 可选。表达 操作的 写关注 在分片集群上发出时, 会将 命令及其帮助程序 |
行为
db.collection.drop()
方法和drop
命令会为删除的集合上打开的任何 变更流 创建 无效 。在删除集合之前,
db.collection.drop()
方法和drop
命令会中止在目标集合上任何正在进行的索引构建。对于副本集或分片副本集,中止主节点上的索引不会同时中止从节点索引构建。MongoDB 尝试中止主节点上指定索引正在进行的构建。如果成功,则会创建关联的
abort
oplog 条目。从节点如果有正在进行的构建的副本,则在提交或中止索引构建之前会等待来自主节点的提交或中止 oplog 条目。删除集合将删除其关联的区域/标记范围。
从 MongoDB5 0开始。如果您尝试从 删除 管理员数据库 或
drop
db.collection.drop()
配置数据库 中的集合,则 、mongos
命令和 方法会返回错误。要删除这些集合,请连接到 配置服务器 并在其中运行命令。
在分片集群上重用已删除的集合名称
在分片集群上,如果创建的集合与在 MongoDB 5.0 之前已删除的某一集合同名,mongos
则可能会将操作转发到错误的分片。为避免此情况,请遵循以下特定于版本的说明:
对于运行 MongoDB 5.0 或更高版本的分片集群,无需执行任何特殊动作。使用 drop()
方法,然后创建具有相同名称的新集合。
对于分片集群,如果您使用drop()
方法,然后创建同名的新collection,则必须:
使用
flushRouterConfig
对每个mongos
刷新已缓存的路由表。使用
db.collection.remove()
删除现有文档并重新使用集合。
刷新缓存的路由表是首选过程,因为它比使用 db.collection.remove()
删除分片集合更快。只有在不想刷新缓存的情况下,才使用 remove()
方法。
资源锁定
版本 4.2 中进行了更改。
db.collection.drop()
在操作期间获得指定集合的独占锁。对集合的所有后续操作都必须等到db.collection.drop()
释放该锁。
MongoDB 4之前的版本。 2 、 db.collection.drop()
获得了对父数据库的独占锁,阻止对数据库及其所有集合的所有操作,直到操作完成。
例子
使用默认写关注来删除集合
以下操作会删除当前数据库中的 students
集合。
db.students.drop()
使用w: 1
写关注删除集合
db.collection.drop()
接受选项文档。
以下操作会删除当前数据库中的 students
集合。该操作使用 1
写关注:
db.students.drop( { writeConcern: { w: 1 } } )