web-dev-qa-db-ja.com

MongoDBでは、コレクションが削除されると、インデックスも自動的に削除されますか?

Mongoでコレクションを作成し、このコレクションにドキュメントを追加した後、ensureIndex()を使用して、このコレクション内のドキュメントの数値フィールドなどにインデックスを作成します。コレクションを削除した場合、インデックスを再作成する必要がありますか?

29
raffian

簡単な答え:はい。

インデックスはコレクションのドロップでドロップしています。インデックスを再作成する必要があります。

コレクションを削除せずに、db.collection_name.remove({})を使用してコレクション内のすべてのアイテムを削除することをお勧めします。より多くのリソースが必要になりますが、インデックスは残します。実際には、すべてのインデックスデータを削除する必要があります。そのため、コレクション全体を削除し、その後でインデックスを再作成することをお勧めします。

37
lig

10個のインデックスを持つコレクションでこれを実行しただけで、手動でそれらを再作成したくありませんでした。 mongoシェルで次の3行を使用して、インデックスを使用してドロップと再作成を実行できます。

var indexes = db.collection.getIndexKeys().splice(1)
db.collection.drop();
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); })

これは、一意のインデックスやスパースインデックスを処理するのに十分なほどスマートではありませんが、代わりにgetIndexes()の出力を使用することで、サポートするのはかなり簡単だと思います。私はそれを必要としなかったので、私はそれをしませんでした。

Splice(1)は、_idのインデックスを削除するだけです。これは、自動作成されるためです。

13
shadfc

コレクションを削除すると、疑わしいようにすべてのインデックスが削除されるため、コレクションを再作成する場合(明示的に、または新しいドキュメントを追加して暗黙的に)、存在する必要のあるインデックスを再作成する必要があります。 _idのデフォルトインデックスが自動的に作成されます。

2
dcrosta