Удалите все индексы из всех коллекций в базе данных MongoDB с помощью командной строки

я использовал mongorestore для восстановления базы данных, но я получаю ошибку, что индекс уже существует, когда я пытаюсь запустить свое приложение.

Я знаю о функции db.коллекция.dropIndex () но есть ли способ автоматизировать это и удалить все индексы из всех коллекций в базе данных сразу?

Я пробовал

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

но это не сделать трюк. Есть идеи?

2 ответов


ваша команда работает для меня (она отбрасывает все индексы в текущей выбранной БД). Но вы также можете использовать эту альтернативу.

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

при отбрасывании индексов только non _id индексы будут сняты.

обходное решение состоит в том, чтобы удалить базу данных и установить --noIndexRestore флаг при восстановлении с mongorestore чтобы индексы не восстанавливались.

С man mongorestore:

--noIndexRestore

новое в версии 2.2.

предотвращает восстановление и построение индексов mongorestore, как указано в соответствующем выводе mongodump.


вы можете использовать эту команду, чтобы удалить все индексы из всех коллекций:

db.getCollectionNames().forEach(function (d) {
   db[d].dropIndexes();
});

попробуйте это!

ссылка