Cerrar correctamente la conexión de la mongoose una vez que haya terminado

Estoy usando mongoose en un script que no está destinado a ejecutarse de manera continua, y estoy enfrentando lo que parece ser un problema muy simple pero no puedo encontrar una respuesta; simplemente, una vez que hago una llamada a cualquier función de mongoose que envía solicitudes a mongodb, mi instancia de nodejs nunca se detiene y tengo que eliminarlo manualmente con, por ejemplo, Ctrl + c o Program.exit ().

El código se parece aproximadamente a esto:

var mongoose = require('mongoose'); // if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ? mongoose.connect('mongodb://localhost:27017/somedb'); // define some models // if I include this line for example, node never stop afterwards var MyModel = mongoose.model('MyModel', MySchema); 

Intenté agregar llamadas a mongoose.disconnect () pero no a resultado. Aparte de eso, todo funciona bien (encontrar, guardar, …).

Este es exactamente el mismo problema que esta persona, lamentablemente no recibió ninguna respuesta: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

Gracias

EDITAR: aceptó la respuesta a continuación, ya que es técnicamente correcta, pero si alguien vuelve a resolver este problema, parece que la mongoose y / o el controlador mongodb no cierran la conexión cuando se le pregunta si todavía hay consultas en ejecución.

Ni siquiera recuerda la llamada de desconexión, no lo hace una vez que las consultas terminan de ejecutarse; simplemente descarta su llamada sin que se lance una excepción o algo por el estilo, y nunca cierra la conexión.

Así que ahí lo tienen: asegúrese de que todas las consultas se hayan procesado antes de llamar a disconnect () si desea que realmente funcione.

Puedes cerrar la conexión con

 mongoose.connection.close() 

La otra respuesta no funcionó para mí. Tuve que usar mongoose.disconnect(); como se indica en esta respuesta .

Puede establecer la conexión a una variable y luego desconectarla cuando haya terminado:

 var db = mongoose.connect('mongodb://localhost:27017/somedb'); // Do some stuff db.disconnect(); 

Estoy usando la versión 4.4.2 y ninguna de las otras respuestas funcionó para mí. Pero useMongoClient que useMongoClient de useMongoClient en las opciones y colocarlo en una variable a la que usted llama close .

 var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true }) //do stuff db.close() 

obtendrá un error si intenta cerrar / desconectar fuera de ese método. Una mejor solución es cerrar la conexión tanto en la callback como en el método. El código falso está aquí.

 var newTodo=new Todo({text:'cook dinner'}); newTodo.save().then((docs)=>{ console.log('todo saved',docs); mongoose.connection.close();//mongoose.disconnect(); also work and prefered },(e)=>{ console.log('unable to save'); });