文档菜单
文档首页
/
MongoDB 手册
/ / /

dropIndexes

本页

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
dropIndexes

已更改在版本6.0.

dropIndexes 命令从指定的集合中删除一个或多个索引(除了 _id 字段的索引和最后一个剩余的分区键索引,如果存在的话)。

提示

mongosh 中,此命令也可以通过db.collection.dropIndex()db.collection.dropIndexes() 辅助方法来运行。.

辅助方法对 mongosh 用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。

此命令在以下环境中的部署中可用

  • MongoDB Atlas:云中MongoDB部署的完全托管服务

注意

此命令在所有MongoDB Atlas集群中受支持。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。

该命令具有以下语法

db.runCommand(
{
dropIndexes: <string>,
index: <string|document|arrayofstrings>,
writeConcern: <document>, comment: <any>
}
)

该命令接受以下字段

字段
类型
描述
dropIndexes
字符串
要删除索引的集合名称。
索引
字符串、文档或字符串数组

要删除的索引或索引列表。

  • 如果要删除除_id索引和最后剩下的分片键索引之外的所有索引(如果存在),请指定"*"

  • 要删除单个索引,指定索引名称、索引规范文档(除非索引是文本索引),或索引名称的数组。要删除文本索引,指定索引名称而不是索引规范文档。如果该索引是最后剩下的分片键索引,dropIndexes将引发错误。

  • 要删除多个索引,指定索引名称的数组。

写关注
文档
可选。一个文档,用于表达drop命令的写关注。省略则使用默认写关注。
注释
任意

可选。用户提供的注释,用于附加到该命令。一旦设置,此注释将出现在以下位置的该命令记录旁边:

注释可以是任何有效的BSON类型(字符串、整数、对象、数组等)。

从MongoDB 6.0开始,如果尝试使用dropIndexes来删除最后一个剩余的与分片键兼容的索引,将引发错误。将"*"传递给dropIndexes将删除除_id索引和最后一个剩余的分片键兼容索引之外的所有索引(如果存在)。

从MongoDB 5.2版本开始,即使另一个索引构建过程中,您也可以使用dropIndexes(删除索引)来删除同一集合上的现有索引。在早期版本中,如果在索引构建过程中尝试删除不同的索引,将导致出现BackgroundOperationInProgressForNamespace(命名空间后台操作正在进行)错误。

dropIndexes操作仅终止使用要删除的索引的查询。这可能会包括将索引视为查询计划一部分的查询。

dropIndexes在操作期间会锁定指定的集合。所有后续对该集合的操作都必须等待dropIndexes释放锁。

如果方法接收到的索引名称数组中包含一个不存在的索引,则方法会出错,而不会删除任何指定的索引。

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

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

如果指定的索引仍在构建中,dropIndexes 会尝试停止正在进行的构建。停止索引构建的效果与删除已构建索引相同。

对于副本集,请在主节点上运行 dropIndexes 命令。主节点将停止索引构建并创建一个相关的 "abortIndexBuild" 操作日志 条目。复制 "abortIndexBuild" 操作日志条目的从节点将停止正在进行的索引构建并丢弃构建任务。有关索引构建过程的详细说明,请参阅 索引构建过程

使用 currentOp 命令来识别与 createIndexesdb.collection.createIndexes() 操作相关的索引构建。有关示例,请参阅 活动索引操作

MongoDB 提供了隐藏或显示索引以供查询计划器使用的功能。通过从计划器中隐藏索引,您可以在不实际删除索引的情况下评估删除索引的潜在影响。

如果评估后用户决定删除索引,则可以删除隐藏的索引;即不需要先取消隐藏才能删除。

然而,如果影响是负面的,用户可以选择取消隐藏索引而不是重新创建已删除的索引。由于索引在隐藏期间会得到完全维护,因此取消隐藏后索引可以立即使用。

有关隐藏索引的更多信息,请参阅 隐藏索引

  • 要删除所有非 _id 索引,请在 index 参数中指定 "*"

    db.runCommand( { dropIndexes: "collection", index: "*" } )
  • 要删除单个索引,请指定要删除的索引名称执行命令。例如,要删除名为 age_1 的索引,请使用以下命令

    db.runCommand( { dropIndexes: "collection", index: "age_1" })

    mongosh 提供了以下辅助方法 db.collection.dropIndex()db.collection.dropIndexes():

    db.collection.dropIndex("age_1");
  • 要删除多个索引,可以通过指定索引名称数组来执行命令

    db.runCommand( { dropIndexes: "collection", index: [ "age_1", "age_1_status_1" ] } )

提示

另请参阅

返回

dropConnections