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