Mongorestoreを使用してデータベースを復元しましたが、アプリケーションを実行しようとすると、インデックスがすでに存在するというエラーが表示されます。
関数db.collection.dropIndex()を知っていますが、これを自動化し、データベース内のすべてのコレクションからすべてのインデックスを一度に削除する方法はありますか?
私はもう試した
db.getCollectionNames().forEach(function(col_name) {
var coll = db.getCollection(col_name);
coll.dropIndexes();
});
しかし、それではうまくいきません。何か案は?
あなたのコマンドは私のために働きます(それは現在選択されているDB上のすべてのインデックスを削除します)。ただし、この代替手段を使用することもできます。
db.getCollectionNames().forEach(function(collName) {
db.runCommand({dropIndexes: collName, index: "*"});
});
インデックスを削除すると、_id
以外のインデックスのみが削除されます。
回避策は、データベースを削除し、mongorestore
で復元するときに--noIndexRestore
フラグを設定して、インデックスが復元されないようにすることです。
man mongorestore
から:
--noIndexRestore
バージョン2.2の新機能。
対応するmongodump出力で指定されているように、mongorestoreがインデックスを復元および構築するのを防ぎます。
このコマンドを使用して、すべてのコレクションからすべてのインデックスを削除できます。
db.getCollectionNames().forEach(function (d) {
db[d].dropIndexes();
});
これを試して!