db.collection.dropIndex()
定义
db.collection.dropIndex(index)
带驱动程序的 MongoDB
本页面提供
mongosh
方法的相关信息。要查看MongoDB驱动程序中的等效方法,请参阅您的编程语言的相应页面:从集合中删除或移除指定索引。
注意
不能删除
_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 版本
行为
dropIndex()
操作只会终止使用被删除索引的查询。这可能包括在查询规划中考虑索引的查询。
资源锁定
db.collection.dropIndex()
在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 db.collection.dropIndex()
释放该锁为止。
中止正在进行的索引构建
版本 4.4 中的新增功能:如果仍在构建为db.collection.dropIndex()
指定的索引, dropIndex()
会尝试中止构建。 中止索引构建与删除构建的索引具有相同的效果。 在 MongoDB 4.4 之前,如果指定的索引仍在构建中, dropIndex()
将返回错误。
为dropIndex()
指定的索引必须是与索引构建器关联的唯一索引,即由单个createIndexes
或db.collection.createIndexes()
操作构建的索引。 如果关联的索引构建器还有其他正在进行中的构建,请等到构建完成并将索引指定为dropIndex()
。
例如, createIndexes
/ createIndexes()
操作会创建三个索引。 假设所有三个索引构建仍在进行中,则dropIndex()
无法成功中止任何索引构建,因此无法删除任何索引。
使用currentOp
标识与createIndexes
/ createIndexes()
操作关联的索引构建。 有关示例,请参阅主动索引操作。
对于副本集或分分片副本集,中止主节点 (primary node in the replica set)节点上的索引不会同时中止从二级索引构建。 dropIndex()
尝试中止主节点 (primary node in the replica set)节点上指定索引的进行中构建,如果成功,则会创建关联的“中止” oplog条目。 在提交或中止索引构建之前,具有复制进行中构建的从节点成员等待来自主节点 (primary node in the replica set)节点的提交或中止oplog条目。
Hidden Indexes
MongoDB 提供对查询规划器隐藏或取消隐藏索引的功能。通过向规划器隐藏索引,您可以评估在不实际删除索引的情况下删除索引的潜在影响。
如果经过评估后,用户决定删除该索引,则您可以删除隐藏索引;即不需要先取消隐藏才能删除。
如有不利影响,用户可以取消隐藏索引,而不必重新创建已删除的索引。由于索引在隐藏期间得到完全维护,因此一旦取消隐藏,索引就立即可用。
有关隐藏索引的更多信息,请参阅隐藏索引。
例子
考虑一个 pets
集合。对 pets
集合调用 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 。 |