I've used mongorestore to restore a database but I'm getting an error that the index already exists when I try to run my application.
I know of the function db.collection.dropIndex() but is there a way to automate this and drop all indexes from all collections in a database at once?
I've tried
db.getCollectionNames().forEach(function(col_name) {
var coll = db.getCollection(col_name);
coll.dropIndexes();
});
But that doesn't do the trick. Any ideas?
Your command works for me (it drops all indexes on the currently selected DB). But you can also use this alternative.
db.getCollectionNames().forEach(function(collName) {
db.runCommand({dropIndexes: collName, index: "*"});
});
When dropping indexes only non _id
indexes will be dropped.
Workaround solution is to drop the database and set --noIndexRestore
flag when restoring with mongorestore
so that the indexes are not restored.
From man mongorestore
:
--noIndexRestore
New in version 2.2.
Prevents mongorestore from restoring and building indexes as specified in the corresponding mongodump output.