MongoDBには、dropIndexes
という管理コマンドがあります 1つ以上のインデックスを削除します(_id
のインデックスを除く) フィールド)指定されたコレクションから。
インデックスの例
posts
というコレクションがあるとします。 次のインデックスを使用します:
db.pets.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "title" : 1 }, "name" : "title_1" }, { "v" : 2, "key" : { "tags" : 1 }, "name" : "tags_1" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
この場合、4つのインデックスがあります。 1つ目は、_id
のデフォルトのインデックスです。 分野。このインデックスは、コレクションを作成すると自動的に作成され、削除することはできません。
他の3つのインデックスは削除できます。
単一のインデックスを削除する
単一のインデックスを削除するには、コレクション名と、インデックス名またはその仕様書を渡します。
例:
db.runCommand( { dropIndexes: "posts", index: "title_1" })
この場合、インデックス名を渡します。
これを実行すると、次の出力が得られます:
{ "nIndexesWas" : 4, "ok" : 1 }
これは、インデックスが削除されたことを示しています。
または、次のように、名前の代わりにインデックス仕様ドキュメントを使用することもできます。
db.runCommand( { dropIndexes: "posts", index: { "title" : 1 } })
複数のインデックスを削除する
複数のインデックスを削除する場合(ただし、すべてではありません インデックス)、配列でインデックス名を渡します。
例:
db.runCommand( {
dropIndexes: "posts",
index: [ "tags_1", "body_text" ]
})
結果:
{ "nIndexesWas" : 3, "ok" : 1 }
この段階で、インデックスのリストを再確認しましょう。
db.posts.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
予想どおり、3つのインデックスが削除され、残りは1つだけです(削除できません)。
配列を渡す場合、テキストインデックスは、インデックス名を指定することによってのみ削除できます。このような場合、他のインデックスのように、仕様書を指定してテキストインデックスを削除することはできません。
すべてのインデックスを削除
アスタリスクワイルドカード(*
)を使用して、すべてのインデックスを削除できます。 。
この例では、インデックスを再作成しました。したがって、インデックスは次のようになります::
db.products.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "title" : 1 }, "name" : "title_1" }, { "v" : 2, "key" : { "tags" : 1 }, "name" : "tags_1" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
それでは、すべてのインデックスを一度に削除しましょう:
db.runCommand( { dropIndexes: "posts", index: "*" })
結果:
{ "nIndexesWas" : 4, "msg" : "non-_id indexes dropped for collection", "ok" : 1 }
_id
を除くすべてのインデックスが削除されました インデックス(そのインデックスは削除できません)。
インデックスをもう一度確認しましょう。
db.products.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
予想どおり、_id
残っているのはインデックスだけです。
MongoDBドキュメント
dropIndexes
の詳細については、MongoDBのドキュメントを参照してください。 コマンド。