mongodbindexingmongodumpmongorestore

Drop all indexes from all collections in a MongoDB database using the command line


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?


Solution

  • Your command works for me (it drops all indexes on the currently selected DB). 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.