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

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

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

Я пробовал

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

Но это не делает трюк. Любые идеи?

Ответ 1

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

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

При отбрасывании индексов будут исключены только индексы _id.

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

От man mongorestore:

- noIndexRestore

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

Предотвращает восстановление mongorestore и индексов здания, как указано в соответствующем выходном файле mongodump.

Ответ 2

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

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

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

Ссылка ссылки