Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

db.collection.dropIndexes()

項目一覧

  • 定義
  • 動作

MongoDB とドライバー

このページでは、 メソッドについて説明します。 MongoDBドライバーで同等のメソッドを確認するには、mongosh プログラミング言語の対応するページを参照してください。

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
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 の配列

オプション。 削除するインデックスを指定します。

_id インデックス以外のすべてをコレクションから削除するには、パラメーターを省略します。

単一のインデックスを削除するには、インデックス名、インデックス仕様ドキュメント(インデックスがテキストインデックスの場合を除く)、またはインデックス名の配列のいずれかを指定します。テキストインデックスを削除するには、インデックス指定ドキュメントの代わりにインデックス名またはインデックス名の配列を指定します。

複数のインデックスを削除するには 、インデックス名の配列を指定します。

MongoDB 5.0以降では、それを使用して最後に残っているシャードキー互換インデックスを削除しようとすると、 dropIndexesによりエラーが発生します。 "*"dropIndexesに渡すと、 _idインデックスと最後に残っているシャードキー互換インデックス(存在する場合)を 除く すべてのインデックスが削除されます。

dropIndexes()操作は、削除されるインデックスを使用しているクエリのみを強制終了します。 これには、クエリ プランの一部としてインデックスを考慮するクエリが含まれる場合があります。

db.collection.dropIndexes()は、操作中、指定されたコレクションに対する排他ロックを取得します。 コレクションに対する後続のすべての操作は、 db.collection.dropIndexes()がロックを解放するまで待機する必要があります。

存在しないインデックスを含むインデックス名の配列がメソッドに渡された場合、指定されたインデックスはいずれも削除せずにエラーになります。

_idフィールドのデフォルト インデックスを削除することはできません。

テキストインデックスを削除するには、インデックス仕様ドキュメントの代わりにインデックス名を指定します。

バージョン 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/createIndexescreateIndexes() 操作に関連付けられたインデックスビルドを識別するには、 を使用します。例については、「アクティブなインデックス操作」を参照してください。

MongoDB では、クエリ プランナーからインデックスを非表示または再表示する機能が提供されます。 プランナーからインデックスを非表示にすることで、実際にインデックスを削除せずに、インデックスを削除した場合の潜在的な影響を評価できます。

評価後にユーザーがインデックスを削除する場合は、非表示のインデックスを削除できます。つまり、削除するために最初に再表示する必要はありません。

ただし、影響が負の場合、ユーザーは削除されたインデックスを再度作成する必要がある代わりに、インデックスを再表示できます。 また、インデックスは非表示になっている間完全に維持されているため、非表示が解除されたらすぐに使用できるようになります。

非表示インデックスの詳細については、「 非表示のインデックス 」を参照してください

戻る

db.collection.dropIndex

項目一覧