db.collection.dropIndexes()
MongoDB とドライバー
このページでは、 メソッドについて説明します。 MongoDBドライバーで同等のメソッドを確認するには、mongosh
プログラミング言語の対応するページを参照してください。
定義
db.collection.dropIndexes()
指定された 1 つまたは複数のインデックス(
_id
フィールドのインデックスと最後に残ったシャード キー インデックスを除く)をコレクションから削除します。この方法を使用すると、次のことができます。
コレクションから
_id
インデックス以外を削除します。db.collection.dropIndexes() コレクションから指定したインデックスを削除します。 インデックスを指定するには、次のいずれかのメソッドを渡します。
インデックス仕様ドキュメント(インデックスが テキストインデックスでない限り、インデックス名を使用して削除します):
db.collection.dropIndexes( { a: 1, b: 1 } ) インデックス名
db.collection.dropIndexes( "a_1_b_1" ) Tip
インデックスの名前を取得するには、
db.collection.getIndexes()
メソッドを使用します。
コレクションから指定したインデックスを削除します。 削除するインデックスを複数指定するには、 メソッドにインデックス名の配列を渡します。
db.collection.dropIndexes( [ "a_1_b_1", "a_1", "a_1__id_-1" ] ) インデックス名の配列に存在しないインデックスが含まれている場合、メソッドは指定されたインデックスを削除せずにエラーを出します。
Tip
インデックスの名前を取得するには、
db.collection.getIndexes()
メソッドを使用します。
db.collection.dropIndexes()
メソッドでは、次の任意パラメーターが使われます。Parameterタイプ説明indexes
string またはドキュメントまたは string の配列
動作
インデックス構築の進行中、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 以前では、コレクションで進行中のインデックスビルドがある場合、 dropIndexes()
はエラーを返していました。
レプリカセットの場合は、 プライマリ でdropIndexes()
を実行します。プライマリはインデックスのビルドを中止し、関連する "abortIndexBuild" oplog エントリを作成します。 "abortIndexBuild" oplog エントリを複製するセカンダリは、進行中のインデックスビルドを中止し、ビルドジョブを破棄します。 インデックス構築プロセスと進行中のインデックス構築を終了するための具体的なタイミングについての詳細なドキュメントについては、「インデックス構築プロセス」を参照してください。
dropIndexes()
に指定されるインデックスは、単一のcreateIndexes
またはdb.collection.createIndexes()
操作に関連付けられた進行中のビルドのセット全体である必要があります。 関連する進行中のビルドのセットから特定のインデックスを削除するには、インデックスのビルドが完了するまで待ち、そのインデックスをdropIndexes()
に指定します。
たとえば、 createIndexes
/ createIndexes()
操作では 3 つのインデックスが作成されます。 3 つのインデックスすべてのビルドが進行中である場合、 dropIndexes()
は 3 つのすべてのインデックスを指定してインデックスビルドを中止し、インデックスを削除する必要があります。
currentOp
/createIndexes
createIndexes()
操作に関連付けられたインデックスビルドを識別するには、 を使用します。例については、「アクティブなインデックス操作」を参照してください。
Hidden Indexes
MongoDB では、クエリ プランナーからインデックスを非表示または再表示する機能が提供されます。 プランナーからインデックスを非表示にすることで、実際にインデックスを削除せずに、インデックスを削除した場合の潜在的な影響を評価できます。
評価後にユーザーがインデックスを削除する場合は、非表示のインデックスを削除できます。つまり、削除するために最初に再表示する必要はありません。
ただし、影響が負の場合、ユーザーは削除されたインデックスを再度作成する必要がある代わりに、インデックスを再表示できます。 また、インデックスは非表示になっている間完全に維持されているため、非表示が解除されたらすぐに使用できるようになります。
非表示インデックスの詳細については、「 非表示のインデックス 」を参照してください。