db.collection.dropIndex()
带驱动程序的 MongoDB
本页面提供 mongosh
方法的相关信息。要查看 MongoDB 驱动程序中的等效方法,请参阅编程语言的相应页面:
定义
db.collection.dropIndex(index)
从集合中删除或移除指定索引。
注意
不能删除
_id
字段上的默认索引。不能指定
db.collection.dropIndex("*")
删除所有非_id
索引。请改用db.collection.dropIndexes()
。
要获取
db.collection.dropIndex()
方法的索引名称或索引规范文档,请使用db.collection.getIndexes()
方法。db.collection.dropIndex()
方法采用以下参数:Parameter类型说明index
字符串或文档必需。指定要删除的索引。可以通过索引名称或索引规范文档来指定索引。
要删除文本索引,请指定该索引的名称。
您无法指定
"*"
来删除所有非_id
索引。请改用db.collection.dropIndexes()
。如果为
db.collection.dropIndex()
指定的索引仍在构建中,db.collection.dropIndex()
会尝试停止正在进行的构建过程。停止索引构建与删除已构建的索引的效果相同。有关更完整的文档,请参阅停止正在进行的索引构建。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
从 MongoDB 5.2 开始,即使另一个索引正在构建中,也可以使用 db.collection.dropIndex()
删除同一个集合上的现有索引。在早期版本中,尝试在进行中的索引构建期间删除其他索引会导致 BackgroundOperationInProgressForNamespace
错误。
资源锁定
db.collection.dropIndex()
在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 db.collection.dropIndex()
释放该锁为止。
停止进行中的索引构建
如果为 db.collection.dropIndex()
指定的索引仍在构建中,db.collection.dropIndex()
会尝试停止正在进行的构建。停止索引构建与删除已构建的索引效果相同。
对于副本集,请在主节点上运行 db.collection.dropIndex()
。主节点停止索引构建并创建关联的“abortIndexBuild”oplog 条目。复制“abortIndexBuild”oplog 条目的从节点会停止正在进行的索引构建并放弃构建作业。有关索引构建过程的详细文档,请参阅索引构建流程。
使用 currentOp
确定与 createIndexes
或 db.collection.createIndexes()
操作相关的索引构建。有关示例,请参阅主动索引操作。
Hidden Indexes
MongoDB 提供对查询规划器隐藏或取消隐藏索引的功能。通过向规划器隐藏索引,您可以评估在不实际删除索引的情况下删除索引的潜在影响。
如果经过评估后,用户决定删除该索引,则您可以删除隐藏索引;即不需要先取消隐藏才能删除。
如有不利影响,用户可以取消隐藏索引,而不必重新创建已删除的索引。由于索引在隐藏期间得到完全维护,因此一旦取消隐藏,索引就立即可用。
有关隐藏索引的更多信息,请参阅隐藏索引。
例子
考虑一个 pets
集合。对 pets
集合调用 db.collection.getIndexes()
方法将返回以下索引:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "cat" : -1 }, "name" : "catIdx" }, { "v" : 2, "key" : { "cat" : 1, "dog" : -1 }, "name" : "cat_1_dog_-1" } ]
字段 cat
上的单字段索引的用户指定名称为 catIdx
[1],索引规范文档为 { "cat" : -1 }
。
要删除索引 catIdx
,您可以使用索引名称:
db.pets.dropIndex( "catIdx" )
或者,也可以使用索引规范文档 { "cat" : -1 }
:
db.pets.dropIndex( { "cat" : -1 } )
[1] | 创建索引时,如果用户未指定索引名称,则系统将索引键字段和值用下划线连接起来生成名称,例如cat_1 。 |