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()
方法接受以下可选参数:
行为
在索引构建过程中将无法删除 Ready
索引
从 MongoDB 5.0开始,如果您尝试使用dropIndexes
删除最后一个剩余的分片键兼容索引,则会引发错误。 将"*"
传递给dropIndexes
会删除除_id
索引和最后剩余的分片键兼容索引(如果存在)之外的所有索引。
仅终止相关查询
dropIndexes()
操作只会终止使用被删除索引的查询。这可能包括在查询规划中考虑索引的查询。
资源锁定
db.collection.dropIndexes()
在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 db.collection.dropIndexes()
释放该锁为止。
索引名称
如果该方法传递给包含不存在索引的索引名称数组,则该方法会出错,但不会删除任何指定索引。
_id
Index
不能删除 _id
字段上的默认索引。
text Indexes
要删除文本索引,请指定索引名称而不是索引规范文档。
中止正在进行的索引构建
版本 4.4 中的新增功能:如果为db.collection.dropIndexes()
指定的索引仍在构建中, dropIndexes()
会尝试中止正在进行的构建。 中止索引构建与删除构建的索引具有相同的效果。 在 MongoDB 4.4 之前,如果collection有任何正在进行的索引构建, dropIndexes()
将返回错误。
对于副本集,请在dropIndexes()
主 节点上运行 。主节点中止索引构建并创建关联的“abortIndexBuild”oplog 条目。 复制“abortIndexBuild”oplog 条目的从节点会中止正在进行的索引构建并放弃构建作业。 有关索引构建过程的详细文档以及终止正在进行的索引构建的具体时间,请参阅索引构建过程。
指定给dropIndexes()
的索引必须是与单个createIndexes
或db.collection.createIndexes()
操作关联的整个进行中的构建集。 要从一组相关的进行中的构建中删除特定索引,请等到索引构建完成并将该索引指定为dropIndexes()
例如, createIndexes
/ createIndexes()
操作会创建三个索引。 假设所有三个索引构建均正在进行中, dropIndexes()
必须指定所有三个索引,才能中止索引构建并删除索引。
使用currentOp
标识与createIndexes
/ createIndexes()
操作关联的索引构建。 有关示例,请参阅主动索引操作。
Hidden Indexes
MongoDB 提供对查询规划器隐藏或取消隐藏索引的功能。通过向规划器隐藏索引,您可以评估在不实际删除索引的情况下删除索引的潜在影响。
如果经过评估后,用户决定删除该索引,则您可以删除隐藏索引;即不需要先取消隐藏才能删除。
如有不利影响,用户可以取消隐藏索引,而不必重新创建已删除的索引。由于索引在隐藏期间得到完全维护,因此一旦取消隐藏,索引就立即可用。
有关隐藏索引的更多信息,请参阅隐藏索引。