21

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

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

私はもう試した

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

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

4

2 に答える 2

36

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

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

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

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

からman mongorestore:

--noIndexRestore

バージョン 2.2 の新機能。

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

于 2014-06-16T11:00:28.687 に答える