在本页面
此页面显示了如何管理现有索引。有关创建索引的说明,请参阅特定的索引类型页面。
MongoDB提供了两种从集合中删除索引的方法:
若要删除索引,请使用db.collection.dropIndex()
方法。
例如,以下操作将删除集合中tax-id
字段上的升序索引
accounts
:
该操作返回具有操作状态的文档:
其中的值nIndexesWas
反映删除该索引
之前的索引数。
对于文本索引,将索引名称传递给
db.collection.dropIndex()
方法。有关
详细信息,请参见使用索引名称删除文本索引。
注意
从MongoDB 4.2开始,
db.collection.dropIndexes()
可以接受索引名称数组。
您也可以使用db.collection.dropIndexes()
删除
集合中除_id索引以外的所有索引。
例如,以下命令从accounts
集合中删除所有索引:
这些shell帮助程序为数据库命令提供了包装
。您的客户端库可能具有与这些操作不同的接口或其他接口。dropIndexes
要从MongoDB Compass中的集合中删除索引:
如果分片集合在每个包含该分片块的分片上没有完全相同的索引(包括索引选项),则该索引的索引不一致。尽管在正常操作期间不应出现不一致的索引,但是可能会出现不一致的索引,例如:
unique
键约束的索引且一个分片包含具有重复文档的块时。在这种情况下,创建索引操作可能会在没有重复的分片上成功,但在没有重复的分片上不会成功。从MongoDB 4.2.6开始,默认情况下,配置服务器主数据库检查分片集合中各个分片之间的索引不一致,并且命令serverStatus
在配置服务器主数据库上运行时,返回field shardedIndexConsistency
字段以报告分片集合的数量索引不一致。
如果shardedIndexConsistency
报告任何索引不一致,则可以对分片集合运行以下管道,直到找到不一致为止。
注意
以下管道适用于MongoDB 4.2.4及更高版本。
定义以下聚合管道:
运行聚合管道以供分片集合进行测试。例如,要测试分片集合test.reviews
在其关联分片上的索引是否不一致:
如果集合的索引不一致,则该集合的聚合返回有关不一致的索引的详细信息:
返回的文档表明分片集合有两个不一致之处test.reviews
:
page_1_score_1
的集合中缺少名为的索引shardB
。reviewDt_1
在集合的各个分片上具有不一致的属性,特别是,这些expireAfterSeconds
属性有所不同。您可以:
对受影响的分片上的集合执行滚动索引构建。
-要么-
db.collection.createIndex()
从
mongos
实例发出索引构建。该操作仅在缺少索引的分片上构建集合的索引。
从受影响的分片上的集合中删除不正确的索引,然后重建索引。要重建索引,您可以:
对受影响的分片上的集合执行滚动索引构建。
-要么-
db.collection.createIndex()
从
mongos
实例发出索引构建。该操作仅在缺少索引的分片上构建集合的索引。
或者,如果不一致是该expireAfterSeconds
属性,则可以运行collMod
命令以更新秒数,而不必删除并重建索引。