dropIndexes
dropIndexes
バージョン 5.0 での変更。
dropIndexes
コマンドは、指定されたコレクションから 1 つ以上のインデックス(_id
フィールドのインデックスと最後に残っているシャードキー インデックス(存在する場合)を除く)を削除します。Tip
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 | string またはドキュメントまたは string の配列 | 削除するインデックス。
|
writeConcern | ドキュメント | 任意。 コマンドの drop 書込み保証( write concern ) を表すドキュメント。デフォルトの書込み保証を使用する場合は省略します。 |
comment | any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 |
動作
MongoDB 5.0以降、最後に残っているシャードキー互換インデックスを削除するために使用しようとすると、 dropIndexes
によりエラーが発生します。 "*"
をdropIndexes
に渡すと、 _id
インデックスと最後に残っているシャードキー互換インデックス(存在する場合)を 除く すべてのインデックスが削除されます。
関連するクエリのみを強制終了します
dropIndexes
操作は、削除されるインデックスを使用しているクエリのみを強制終了します。 これには、クエリ プランの一部としてインデックスを考慮するクエリが含まれる場合があります。
リソースのロック
dropIndexes
は、操作中、指定されたコレクションに対する排他ロックを取得します。 コレクションに対する後続のすべての操作は、 dropIndexes
がロックを解放するまで待機する必要があります。
インデックス名
存在しないインデックスを含むインデックス名の配列がメソッドに渡された場合、指定されたインデックスはいずれも削除せずにエラーになります。
_id
Index
_id
フィールドのデフォルト インデックスを削除することはできません。
text Indexes
テキストインデックスを削除するには、インデックス仕様ドキュメントの代わりにインデックス名を指定します。
進行中のインデックスビルドの中止
バージョン 4.4 で追加: 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 では、クエリ プランナーからインデックスを非表示または再表示する機能が提供されます。 プランナーからインデックスを非表示にすることで、実際にインデックスを削除せずに、インデックスを削除した場合の潜在的な影響を評価できます。
評価後にユーザーがインデックスを削除する場合は、非表示のインデックスを削除できます。つまり、削除するために最初に再表示する必要はありません。
ただし、影響が負の場合、ユーザーは削除されたインデックスを再度作成する必要がある代わりに、インデックスを再表示できます。 また、インデックスは非表示になっている間完全に維持されているため、非表示が解除されたらすぐに使用できるようになります。
非表示インデックスの詳細については、「 非表示のインデックス 」を参照してください。
例
_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" ] } )