Pregunta

Estoy usando Mongoose en un script que no está destinado a ejecutar continuamente, y me enfrento a lo que parece ser un problema muy simple, pero no puedo encontrar una respuesta; En pocas palabras, una vez que haga una llamada a cualquier función de mangosta que envíe solicitudes a MongoDB Mi instancia de NodeJ nunca se detiene y tengo que matarla manualmente con, por ejemplo, Ctrl+C o Program.exit ().

El código se ve más o menos así:

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 para dar como 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 alguna vez alcanza este problema nuevamente, parece que Mongoose y/o el controlador MongoDB en realidad no cierran la conexión cuando lo pregunta si todavía hay consultas en ejecución.

Ni siquiera recuerda la llamada de desconexión en absoluto, no lo hace una vez que las consultas terminan de funcionar; Simplemente descarta su llamada sin excepción o nada por el estilo, y nunca cierre la conexión.

Así que ahí lo tiene: asegúrese de que cada consulta se haya procesado antes de llamar a la desconexión () si desea que realmente funcione.

¿Fue útil?

Solución

Puedes cerrar la conexión con

mongoose.connection.close()

Otros consejos

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 agregando useMongoClient a las opciones y ponerlo en una variable que llame close parecía funcionar.

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

//do stuff

db.close()

Recibirá un error si intenta cerrar/desconectar fuera del método. La mejor solución es cerrar la conexión en ambas devoluciones de llamada en el método. El código ficticio está aquí.

const newTodo = new Todo({text:'cook dinner'});

newTodo.save().then((docs) => {
  console.log('todo saved',docs);
  mongoose.connection.close();
},(e) => {
  console.log('unable to save');
});

Probablemente tengas esto:

const db = mongoose.connect('mongodb://localhost:27017/db');

// Do some stuff

db.disconnect();

Pero también puedes tener algo como esto:

mongoose.connect('mongodb://localhost:27017/db');

const model = mongoose.model('Model', ModelSchema);

model.find().then(doc => {
  console.log(doc);
}

No puedes llamar db.disconnect() Pero puede cerrar la conexión después de usarla.

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top