J'ai un service REST intégré à node.js avec Restify et Mongoose et un mongoDB avec une collection d'environ 30.000 documents de taille régulière. Mon service de nœud fonctionne via pmx et pm2.
Hier, soudainement, le nœud a commencé à chercher des erreurs avec le message "MongoError: Topology was destroy", rien de plus. Je n'ai aucune idée de ce que cela signifie et de ce qui aurait pu déclencher cela. il n'y a pas grand-chose à trouver lors de la recherche sur Google. Alors j'ai pensé que je demanderais ici.
Après avoir redémarré le service de nœud aujourd'hui, les erreurs ont cessé d'arriver. J'en ai également une en cours de production et cela me fait peur que cela puisse arriver à tout moment à une partie assez cruciale de la configuration qui y est exécutée ...
J'utilise les versions suivantes des packages mentionnés:
- mangouste: 4.0.3
- restifier: 3.0.3
- nœud: 0.10.25
Réponses:
Cela semble signifier que la connexion de votre serveur de nœuds à votre instance MongoDB a été interrompue pendant qu'il essayait d'écrire dessus.
Jetez un œil au code source Mongo qui génère cette erreur
Cela ne semble pas être lié au problème de Sails cité dans les commentaires, car aucune mise à niveau n'a été installée pour précipiter le crash ou le «correctif»
la source
Je sais que la réponse de Jason a été acceptée, mais j'ai eu le même problème avec Mongoose et j'ai constaté que le service hébergeant ma base de données recommandait d'appliquer les paramètres suivants afin de maintenir la connexion de Mongodb en production:
J'espère que cette réponse pourra aider d'autres personnes ayant des erreurs "La topologie a été détruite".
la source
Cette erreur est due au fait que le pilote mongo a interrompu la connexion pour une raison quelconque (le serveur était en panne par exemple).
Par défaut, la mangouste essaiera de se reconnecter pendant 30 secondes, puis arrêtera de réessayer et lancera des erreurs pour toujours jusqu'au redémarrage.
Vous pouvez changer cela en éditant ces 2 champs dans les options de connexion
documentation des options de connexion
la source
server: {
etc.Dans mon cas, cette erreur a été causée par une section
db.close();
hors d'une section 'await' à l'intérieur de 'async'la source
db.close
dans unthen
bloc, non?db.close
vers unthen
bloc a très bien fonctionné pour moi avec le pilote natif MongoDB Node.js.Juste un ajout mineur à la réponse de Gaafar, cela m'a donné un avertissement de dépréciation. Au lieu de sur l'objet serveur, comme ceci:
Il peut aller sur l'objet de niveau supérieur. En gros, retirez-le simplement de l'objet serveur et placez-le dans l'objet options comme ceci:
la source
"La topologie a été détruite" peut être causée par la déconnexion de la mangouste avant la création des index de documents mongo, selon ce commentaire
Afin de vous assurer que tous les modèles ont leurs index créés avant de se déconnecter, vous pouvez:
la source
Le commentaire de Sebastian sur la réponse d'Adrien a besoin de plus d'attention, cela m'a aidé, mais il peut être ignoré parfois, alors voici une solution :
la source
J'ai également eu la même erreur. Enfin, j'ai trouvé que j'avais une erreur sur mon code. J'utilise l'équilibrage de charge pour deux serveurs nodejs, mais je mets simplement à jour le code d'un serveur.
Je change de serveur mongod
from standalone to replication
, mais j'oublie de faire la mise à jour correspondante pour la chaîne de connexion, j'ai donc rencontré cette erreur.chaîne de connexion autonome:
mongodb://server-1:27017/mydb
chaîne de connexion de réplication:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
détails ici :[mongo doc for connection string]
la source
J'ai rencontré cela dans l'environnement kubernetes / minikube + nodejs + mongoose. Le problème était que le service DNS était en place avec une sorte de latence. Vérifier que DNS est prêt a résolu mon problème.
(les nombres dans db_options sont arbitraires trouvés sur stackoverflow et des sites similaires)
la source
Voici ce que j'ai fait, cela fonctionne très bien. Le problème a disparu après l'ajout des options ci-dessous.
la source
Vous devez redémarrer mongo pour résoudre l'erreur de topologie, puis modifiez simplement certaines options de mongoose ou mongoclient pour surmonter ce problème:
la source
J'ai eu cette erreur alors que je créais une nouvelle base de données sur ma communauté MongoDb Compass. Le problème était avec mon Mongod, il ne fonctionnait pas. Donc, comme solution, j'ai dû exécuter la commande Mongod comme précédemment.
J'ai pu créer une base de données après avoir exécuté cette commande.
J'espère que ça aide.
la source
Je me débattais avec cela pendant un certain temps - Comme vous pouvez le voir dans d'autres réponses, le problème peut être très différent.
Le moyen le plus simple de découvrir ce qui cause est de l'activer
loggerLevel: 'info'
dans les optionsla source
Dans mon cas, cette erreur a été causée par une instance de serveur identique exécutant déjà en arrière-plan.
Ce qui est étrange, c'est que lorsque j'ai démarré mon serveur sans préavis, il y en a déjà un en cours d'exécution, la console n'affiche rien du genre «quelque chose utilise le port xxx». Je pourrais même télécharger quelque chose sur le serveur. Donc, il m'a fallu assez de temps pour localiser ce problème.
De plus, après avoir fermé toutes les applications que j'imagine, je n'ai toujours pas trouvé le processus qui utilise ce port dans le moniteur d'activité de mon Mac. Je dois utiliser
lsof
pour tracer. Le coupable n'était pas surprenant - c'est un processus de nœud. Cependant, avec le PID affiché dans le terminal, j'ai trouvé que le numéro de port du moniteur était différent de celui utilisé par mon serveur.Dans l'ensemble, tuer tous les processus de nœud peut résoudre ce problème directement.
la source
J'ai résolu ce problème en:
la source