Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.collection.dropIndex()

在此页面上

  • 定义
  • 兼容性
  • 行为
  • 例子
db.collection.dropIndex(index)

带驱动程序的 MongoDB

本页面提供 mongosh 方法的相关信息。要查看MongoDB驱动程序中的等效方法,请参阅您的编程语言的相应页面:

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala

从集合中删除或移除指定索引。

注意

  • 不能删除 _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 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

dropIndex() 操作只会终止使用被删除索引的查询。这可能包括在查询规划中考虑索引的查询。

db.collection.dropIndex() 在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 db.collection.dropIndex() 释放该锁为止。

版本 4.4 中的新增功能:如果仍在构建为db.collection.dropIndex()指定的索引, dropIndex()会尝试中止构建。 中止索引构建与删除构建的索引具有相同的效果。 在 MongoDB 4.4 之前,如果指定的索引仍在构建中, dropIndex()将返回错误。

dropIndex()指定的索引必须是与索引构建器关联的唯一索引,即由单个createIndexesdb.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条目。

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

后退

db.collection.drop