dropIndexes
dropIndexes
5.0 版本中的更改。
dropIndexes
命令从指定集合中删除一个或多个索引(_id
字段上的索引和最后剩余的分分片键索引除外,如果存在)。提示
在
mongosh
中,该命令还运行通过db.collection.dropIndex()
和db.collection.dropIndexes()
辅助方法运行。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
{ dropIndexes: <string>, index: <string|document|arrayofstrings>, writeConcern: <document>, comment: <any> }
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 |
---|---|---|
dropIndexes | 字符串 | 要删除索引的集合名称。 |
索引(index) | 字符串或文档或字符串数组 | |
writeConcern | 文档 | 可选。 表达 命令 写关注(write concern) |
| any | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 |
行为
从 MongoDB 5.0 开始,如果您尝试使用它来删除最后剩下的分片键兼容索引,dropIndexes
会引发错误。将 "*"
传递给 dropIndexes
会删除除 _id
索引和最后剩下的分片键兼容索引(如果存在)之外的所有索引。
仅终止相关查询
dropIndexes
操作只会终止使用被删除索引的查询。这可能包括在查询规划中考虑索引的查询。
资源锁定
dropIndexes
在操作期间获得对指定集合的独占锁。对集合的所有后续操作都必须等到 dropIndexes
释放该锁为止。
索引名称
如果该方法传递给包含不存在索引的索引名称数组,则该方法会出错,但不会删除任何指定索引。
_id
Index
不能删除 _id
字段上的默认索引。
text Indexes
要删除文本索引,请指定索引名称而不是索引规范文档。
中止正在进行的索引构建
版本 4.4 中的新增功能:如果为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 提供对查询规划器隐藏或取消隐藏索引的功能。通过向规划器隐藏索引,您可以评估在不实际删除索引的情况下删除索引的潜在影响。
如果经过评估后,用户决定删除该索引,则您可以删除隐藏索引;即不需要先取消隐藏才能删除。
如有不利影响,用户可以取消隐藏索引,而不必重新创建已删除的索引。由于索引在隐藏期间得到完全维护,因此一旦取消隐藏,索引就立即可用。
有关隐藏索引的更多信息,请参阅隐藏索引。
示例
要删除所有非
_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" ] } )