У меня есть служба REST, встроенная в node.js с Restify и Mongoose, и mongoDB с коллекцией, содержащей около 30 000 документов обычного размера. У меня есть служба узла, работающая через pmx и pm2.
Вчера, внезапно, узел начал выводить сообщения об ошибках с сообщением «MongoError: Топология была уничтожена», не более того. Я понятия не имею, что подразумевается под этим и что, возможно, могло вызвать это. при поиске в Google это тоже не так много. Поэтому я решил спросить здесь.
После перезапуска службы узла сегодня ошибки перестали поступать. У меня также есть одна из них, запущенная в работе, и она пугает меня, что это может произойти в любой момент с довольно важной частью выполняемой там установки ...
Я использую следующие версии упомянутых пакетов:
- мангуст: 4.0.3
- restify: 3.0.3
- узел: 0.10.25
Ответы:
Кажется, это означает, что соединение вашего нод-сервера с вашим экземпляром MongoDB было прервано во время попытки записи в него.
Взгляните на исходный код Mongo, который генерирует эту ошибку
Похоже, это не связано с проблемой Sails, упомянутой в комментариях, так как не было установлено никаких обновлений, чтобы ускорить сбой или «исправить»
источник
Я знаю, что ответ Джейсона был принят, но у меня была та же проблема с Mongoose, и я обнаружил, что служба, поддерживающая мою базу данных, рекомендовала применить следующие параметры , чтобы поддерживать соединение Mongodb в рабочем состоянии:
Я надеюсь, что этот ответ может помочь другим людям с ошибками «Топология была уничтожена».
источник
Эта ошибка происходит из-за того, что драйвер Монго разорвал соединение по любой причине (например, сервер не работал).
По умолчанию мангуста будет пытаться восстановить соединение в течение 30 секунд, затем прекратит повторную попытку и выкинет ошибки навсегда до перезапуска.
Вы можете изменить это, отредактировав эти 2 поля в настройках подключения
документация по вариантам подключения
источник
server: {
т. Д.В моем случае эта ошибка была вызвана
db.close();
разделом «ожидание» внутри «async»источник
db.close
вthen
блок, верно?db.close
кthen
блоку работал большим для меня с родным драйвером MongoDB Node.js.Просто незначительное дополнение к ответу Гаафара, это дало мне предупреждение об устаревании. Вместо объекта на сервере, вот так:
Это может пойти на объекте верхнего уровня. По сути, просто извлеките его из объекта сервера и поместите в объект параметров следующим образом:
источник
«Топология была уничтожена» может быть вызвано отключением mongoose перед созданием индексов документов mongo, согласно этому комментарию
Чтобы убедиться, что все модели имеют свои индексы, построенные перед отключением, вы можете:
источник
Комментарий Себастьяна к ответу Адриена требует большего внимания, это помогло мне, но этот комментарий может быть проигнорирован, так что вот решение :
источник
У меня тоже была такая же ошибка. Наконец, я обнаружил, что у меня есть ошибка в моем коде. Я использую балансировку нагрузки для двух серверов nodejs, но я просто обновляю код одного сервера.
Я меняю свой сервер mongod
from standalone to replication
, но забываю сделать соответствующее обновление для строки подключения, поэтому я встретил эту ошибку.строка автономного подключения:
mongodb://server-1:27017/mydb
строка подключения репликации:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
подробности здесь: [Mongo Doc для строки подключения]
источник
Я встречал это в среде kubernetes / minikube + nodejs + mongoose. Проблема заключалась в том, что служба DNS работала с некоторой задержкой. Проверка DNS готова решить мою проблему.
(числа в db_options произвольно найдены на стековом потоке и подобных сайтах)
источник
Вот что я сделал, работает отлично. Проблема исчезла после добавления ниже вариантов.
источник
Вам нужно перезапустить mongo, чтобы решить ошибку топологии, а затем просто изменить некоторые параметры mongoose или mongoclient, чтобы преодолеть эту проблему:
источник
Я получил эту ошибку, когда создавал новую базу данных в сообществе MongoDb Compass. Проблема была с моим Mongod, он не работал. В качестве исправления я должен был выполнить команду Mongod, как описано выше.
Я смог создать базу данных после выполнения этой команды.
Надеюсь, поможет.
источник
Я боролся с этим в течение некоторого времени - как вы можете видеть из других ответов, проблема может быть совсем другой.
Самый простой способ выяснить, что является причиной этого, это включить
loggerLevel: 'info'
в настройкахисточник
В моем случае эта ошибка была вызвана тем же экземпляром сервера, который уже работал в фоновом режиме.
Странно то, что когда я запустил свой сервер без предварительного уведомления, он уже запущен, консоль не показала ничего вроде «что-то использует порт xxx». Я мог бы даже загрузить что-то на сервер. Итак, мне потребовалось довольно много времени, чтобы найти эту проблему.
Более того, после закрытия всех приложений, которые я могу себе представить, я все еще не мог найти процесс, использующий этот порт, в мониторе активности моего Mac. Я должен использовать
lsof
для отслеживания. Виновник не был удивительным - это процесс узла. Однако с помощью идентификатора PID, показанного в терминале, я обнаружил, что номер порта на мониторе отличается от номера порта, используемого моим сервером.В общем, уничтожение всех процессов узла может решить эту проблему напрямую.
источник
Я решил эту проблему:
источник