mongoError: Topology was destroyed mongoError: Topology was destroyed mongoose mongoose

mongoError: Topology was destroyed


It seems to mean your node server's connection to your MongoDB instance was interrupted while it was trying to write to it.

Take a look at the Mongo source code that generates that error

Mongos.prototype.insert = function(ns, ops, options, callback) {    if(typeof options == 'function') callback = options, options = {};    if(this.s.state == DESTROYED) return callback(new MongoError(f('topology was destroyed')));    // Topology is not connected, save the call in the provided store to be    // Executed at some point when the handler deems it's reconnected    if(!this.isConnected() && this.s.disconnectHandler != null) {      callback = bindToCurrentDomain(callback);      return this.s.disconnectHandler.add('insert', ns, ops, options, callback);    }    executeWriteOperation(this.s, 'insert', ns, ops, options, callback);}

This does not appear to be related to the Sails issue cited in the comments, as no upgrades were installed to precipitate the crash or the "fix"


I know that Jason's answer was accepted, but I had the same problem with Mongoose and found that the service hosting my database recommended to apply the following settings in order to keep Mongodb's connection alive in production:

var options = {  server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },  replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }};mongoose.connect(secrets.db, options);

I hope that this reply may help other people having "Topology was destroyed" errors.


This error is due to mongo driver dropping the connection for any reason (server was down for example).

By default mongoose will try to reconnect for 30 seconds then stop retrying and throw errors forever until restarted.

You can change this by editing these 2 fields in the connection options

mongoose.connect(uri,     { server: {         // sets how many times to try reconnecting        reconnectTries: Number.MAX_VALUE,        // sets the delay between every retry (milliseconds)        reconnectInterval: 1000         }     });

connection options documentation