db.collection.dropIndexes()

在本页面

定义

  • 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()方法。

  • 从集合中删除指定的索引。(从MongoDB 4.2开始可用)。要指定要删除的多个索引,请向该方法传递一个索引名称数组:

    db.collection.dropIndexes( [ "a_1_b_1", "a_1", "a_1__id_-1" ] )

    如果索引名称数组包含不存在的索引,则该方法将出错,而不会删除任何指定的索引。

    建议

    若要获取索引的名称,请使用 db.collection.getIndexes()方法。

db.collection.dropIndexes()方法采用以下可选参数:

db.collection.dropIndexes()是围绕着一个包装 dropIndexes命令。

行为

只kill相关查询

从MongoDB 4.2开始,该dropIndexes()操作只会终止使用正在删除的索引的查询。这可能包括将索引视为查询计划一部分的 查询。

在MongoDB 4.2之前,在集合上删除索引将杀死该集合上所有打开的查询。

资源锁定

在版本4.2中进行了更改。

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

在MongoDB 4.2之前的版本中,db.collection.dropIndexes()获得了对父数据库的排他锁,阻止了对数据库_及其_所有集合的所有操作,直到操作完成。

索引名称

如果给该方法传递了一个包含不存在的索引的索引名数组,则该方法将出错,而不会删除任何指定的索引。

_id索引

您不能在_id字段上删除默认索引。

文本索引

要删除文本索引,请指定索引名称而不是索引规范文档。

译者:李冠飞

校对:

最后更新于