db.collection.dropIndex()
定义
db.collection.dropIndex(index)
重要
mongosh 方法
本页面提供
mongosh
方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。有关数据库命令,请参阅
dropIndexes
命令。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
从集合中删除或移除指定索引。
注意
不能删除
_id
字段上的默认索引。不能指定
db.collection.dropIndex("*")
删除所有非_id
索引。请改用db.collection.dropIndexes()
。
要获取
db.collection.dropIndex()
方法的索引名称或索引规范文档,请使用db.collection.getIndexes()
方法。db.collection.dropIndex()
方法采用以下参数:参数类型说明index
字符串或文档必需。指定要删除的索引。可以通过索引名称或索引规范文档来指定索引。
要删除文本索引,请指定该索引的名称。
您无法指定
"*"
来删除所有非_id
索引。请改用db.collection.dropIndexes()
。如果为
db.collection.dropIndex()
指定的索引仍在构建中,db.collection.dropIndex()
会尝试停止正在进行的构建过程。停止索引构建与删除已构建的索引的效果相同。有关更完整的文档,请参阅停止正在进行的索引构建。
行为
从 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()
操作相关的索引构建。有关示例,请参阅主动索引操作。
隐藏索引
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 。 |