Отбросьте все индексы из всех коллекций в базе данных 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();
});
Попробуйте это!
Ссылка ссылки