db.collection.drop()
带驱动程序的 MongoDB
本页面提供 mongosh
方法的相关信息。要查看 MongoDB 驱动程序中的等效方法,请参阅编程语言的相应页面:
定义
注意
如果指定的集合不存在, 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 条目。删除集合将删除其关联的区域/标记范围。
从 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 } } )