web-dev-qa-db-ja.com

コマンドラインを使用して、MongoDBデータベース内のすべてのコレクションからすべてのインデックスを削除します

Mongorestoreを使用してデータベースを復元しましたが、アプリケーションを実行しようとすると、インデックスがすでに存在するというエラーが表示されます。

関数db.collection.dropIndex()を知っていますが、これを自動化し、データベース内のすべてのコレクションからすべてのインデックスを一度に削除する方法はありますか?

私はもう試した

db.getCollectionNames().forEach(function(col_name) {   
   var coll = db.getCollection(col_name);   
   coll.dropIndexes(); 
});

しかし、それではうまくいきません。何か案は?

16
Simon

あなたのコマンドは私のために働きます(それは現在選択されているDB上のすべてのインデックスを削除します)。ただし、この代替手段を使用することもできます。

db.getCollectionNames().forEach(function(collName) { 
    db.runCommand({dropIndexes: collName, index: "*"});
});

インデックスを削除すると、_id以外のインデックスのみが削除されます。

回避策は、データベースを削除し、mongorestoreで復元するときに--noIndexRestoreフラグを設定して、インデックスが復元されないようにすることです。

man mongorestoreから:

--noIndexRestore

バージョン2.2の新機能。

対応するmongodump出力で指定されているように、mongorestoreがインデックスを復元および構築するのを防ぎます。

26
Christian P

このコマンドを使用して、すべてのコレクションからすべてのインデックスを削除できます。

db.getCollectionNames().forEach(function (d) {
   db[d].dropIndexes();
});

これを試して!

参照リンク

1
Rahul Mankar