db.collection.drop()
定义
db.collection.drop(<options>)
带驱动程序的 MongoDB
本页面提供
mongosh
方法的相关信息。要查看 MongoDB 驱动程序中的等效方法,请参阅您的编程语言的相应页面:从数据库中删除集合或视图。该方法还会删除与删除的集合关联的任何索引。该方法为
drop
命令提供了一个包装器。返回: true
注意
如果指定的集合不存在, db.collection.drop()
仍返回 true
。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
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 条目。删除集合将删除其关联的区域/标记范围。
从 MongoDB 5.0 开始,如果您尝试从
mongos
在管理员数据库或配置数据库中删除集合,那么drop
命令和db.collection.drop()
方法将返回错误。要删除这些集合,请连接到配置服务器并在其中运行命令。从 MongoDB 6.0 开始,
db.collection.drop()
方法会删除指定的集合以及与加密字段相关的所有内部集合。警告
db.collection.drop()
方法的行为与驱动程序drop
方法的行为不同。驱动程序的连接必须启用自动加密,才能删除指定的集合以及与加密字段相关的任何内部集合。mongosh
始终删除指定的集合以及与加密字段相关的任何内部集合。
在分片集群上重用已删除的集合名称
在分片集群上,如果创建的集合与在 MongoDB 5.0 之前已删除的某一集合同名,mongos
则可能会将操作转发到错误的分片。为避免此情况,请遵循以下特定于版本的说明:
对于运行 MongoDB 5.0 或更高版本的分片集群,无需执行任何特殊动作。使用 drop()
方法,然后创建具有相同名称的新集合。
对于分片集群,如果使用 drop()
方法,然后创建同名的新集合,则必须采取以下任一措施:
使用
flushRouterConfig
对每个mongos
刷新已缓存的路由表。使用
db.collection.remove()
删除现有文档并重新使用集合。
刷新缓存的路由表是首选过程,因为它比使用 db.collection.remove()
删除分片集合更快。只有在不想刷新缓存的情况下,才使用 remove()
方法。
资源锁定
db.collection.drop()
在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 db.collection.drop()
释放该锁为止。
例子
使用默认写关注来删除集合
以下操作会删除当前数据库中的 students
集合。
db.students.drop()
使用 w: 1
写关注删除集合
db.collection.drop()
接受选项文档。
以下操作会删除当前数据库中的 students
集合。该操作使用 1
写关注:
db.students.drop( { writeConcern: { w: 1 } } )