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?
To drop all indexes except the _id index and the last remaining shard key index from the collection if one exists, specify "*" . To drop a single index, specify either the index name, the index specification document (unless the index is a text index), or an array of the index name.
Starting in MongoDB 5.2, you can use db. collection. dropIndexes() to drop existing indexes on the same collection even if there is a build in progress on another index.
You can find all the available indexes in a MongoDB collection by using the getIndexes method. This will return all the indexes in a specific collection. Result: The output contains the default _id index and the user-created index student name index.
MongoDB's db. collection. drop() is used to drop a collection from the database.
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.
You can use this command to drop all the indexes from all the collections:
db.getCollectionNames().forEach(function (d) { db[d].dropIndexes(); });
Try this!
Reference link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With