db.collection.dropIndexes()
MongoDB与驱动程序一起
本页记录了一个mongosh 方法。要查看MongoDB驱动程序中等效的方法,请参阅您编程语言的相应页面
定义
db.collection.dropIndexes()从集合中删除指定的索引或索引(除了_id字段上的索引和最后一个剩余的分区键索引)。
可以使用此方法:
从集合中删除除_id索引之外的所有索引。
db.collection.dropIndexes() 从集合中删除指定的索引。要指定索引,可以将方法传递以下内容:
索引规范文档(除非索引是文本索引,在这种情况下,使用索引名称来删除)
db.collection.dropIndexes( { a: 1, b: 1 } ) 索引名称
db.collection.dropIndexes( "a_1_b_1" ) 提示
要获取索引的名称,请使用
db.collection.getIndexes()方法。
从集合中删除指定的索引。要指定多个要删除的索引,将方法传递一个索引名称数组
db.collection.dropIndexes( [ "a_1_b_1", "a_1", "a_1__id_-1" ] ) 如果索引名称数组中包含不存在的索引,则方法错误,不会删除任何指定的索引。
提示
要获取索引的名称,请使用
db.collection.getIndexes()方法。
db.collection.dropIndexes()方法接受以下可选参数
兼容性
此方法在以下环境中托管的服务中可用
MongoDB Atlas:云中MongoDB部署的全托管服务
注意
此命令在所有MongoDB Atlas集群中受支持。有关所有命令的Atlas支持信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅、自主管理的MongoDB版本
MongoDB Community:源代码公开、免费使用和自主管理的MongoDB版本
行为
从MongoDB 6.0开始,如果尝试使用db.collection.dropIndexes()删除最后一个剩余的兼容分片键索引,则会引发错误。将"*"传递给db.collection.dropIndexes()将删除所有索引,除了_id索引和最后一个剩余的兼容分片键索引(如果存在的话)。
从MongoDB 5.2开始,即使另一个索引正在构建中,也可以使用db.collection.dropIndexes()删除同一集合上的现有索引。在早期版本中,在索引构建过程中尝试删除不同索引会导致BackgroundOperationInProgressForNamespace错误。
仅终止相关查询
dropIndexes()操作只会终止使用要删除的索引的查询。这可能包括将索引视为查询计划一部分的查询。
资源锁定
db.collection.dropIndexes() 在操作期间对指定的集合获取独占锁。所有后续对该集合的操作都必须等待 db.collection.dropIndexes() 释放锁。
索引名称
如果方法传递了一个包含不存在索引名称的数组,则方法将出错而不会删除指定的任何索引。
_id 索引
您不能删除 _id 字段上的默认索引。
文本索引
要删除一个文本索引,指定索引名称而不是索引规范文档。
停止正在进行的索引构建
如果指定给db.collection.dropIndexes()的索引仍在构建中,db.collection.dropIndexes()尝试停止正在进行的构建。停止索引构建的效果与删除已构建的索引相同。
对于副本集,在主节点上运行db.collection.dropIndexes()。主节点停止索引构建并创建一个相关的"abortIndexBuild" 操作日志条目。复制该"abortIndexBuild"操作日志条目的次级节点停止正在进行的索引构建并丢弃构建作业。有关索引构建过程的详细文档,请参阅索引构建过程。
使用currentOp来识别与createIndexes或db.collection.createIndexes()操作相关的索引构建。请参阅活动索引操作以获取示例。
隐藏索引
MongoDB 提供了隐藏或显示索引以供查询规划器使用的功能。通过从规划器中隐藏索引,可以在实际删除索引之前评估删除索引的潜在影响。
如果评估后用户决定删除索引,可以删除隐藏的索引;即不需要先取消隐藏再删除。
然而,如果影响是负面的,用户可以选择取消隐藏索引,而不是重新创建已删除的索引。由于索引在隐藏期间会完全维护,一旦取消隐藏,索引即可立即使用。
有关隐藏索引的更多信息,请参阅 隐藏索引。