web-dev-qa-db-de.com

Schließen Sie die Verbindung der Mungo richtig, wenn Sie fertig sind

Ich verwende Mungo in einem Skript, das nicht ständig ausgeführt werden soll, und ich stehe vor einem scheinbar einfachen Problem, doch ich kann keine Antwort finden. Wenn ich einmal eine Moose-Funktion anrufe, die Anfragen an mongodb sendet, stoppt meine nodejs-Instanz nie und ich muss sie manuell mit Strg + c oder Program.exit () beenden.

Der Code sieht ungefähr so ​​aus:

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);

Ich habe versucht, Aufrufe zu mongoose.disconnect () hinzuzufügen, aber nicht zu resultieren. Abgesehen davon funktioniert alles gut (finden, speichern, ...).

Dies ist das gleiche Problem wie diese Person. Leider hat er keine Antwort erhalten: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

Vielen Dank

BEARBEITEN: Die untenstehende Antwort wurde akzeptiert, da sie technisch korrekt ist. Wenn jedoch jemand dieses Problem erneut trifft, scheint es so, als würden Mungo und/oder der mongodb-Treiber die Verbindung nicht wirklich schließen, wenn Sie gefragt werden, ob noch Abfragen ausgeführt werden.

Es erinnert sich nicht einmal an den Verbindungsabbruch, es wird nicht ausgeführt, wenn Abfragen abgeschlossen sind. es verwirft lediglich Ihren Anruf, ohne dass eine Ausnahme ausgelöst wird oder Ähnliches, und die Verbindung wird nie geschlossen.

Also haben Sie es: Vergewissern Sie sich, dass jede Abfrage verarbeitet wurde, bevor Sie disconnect () aufrufen, wenn Sie möchten, dass sie tatsächlich funktioniert.

106
Lepidosteus

Sie können die Verbindung mit beenden

mongoose.connection.close()
156
Kenan

Die andere Antwort hat bei mir nicht funktioniert. Ich musste mongoose.disconnect(); verwenden, wie in diese Antwort angegeben. 

56
msrxthr

Sie können die Verbindung auf eine Variable setzen und sie trennen, wenn Sie fertig sind:

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

// Do some stuff

db.disconnect();
11
Jake Wilson

Ich verwende Version 4.4.2 und keine der anderen Antworten funktionierte für mich. Das Hinzufügen von useMongoClient zu den Optionen und das Einfügen in eine Variable, die Sie close nennen, schien zu funktionieren. 

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

//do stuff

db.close()
3
tumelo

Wahrscheinlich haben Sie Folgendes:

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

// Do some stuff

db.disconnect();

sie können aber auch so etwas haben:

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

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

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

sie können db.disconnect() nicht aufrufen, aber Sie können die Verbindung schließen, nachdem Sie sie verwendet haben.

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});
0
Carlos Abraham

sie erhalten eine Fehlermeldung, wenn Sie versuchen, die close-Methode außerhalb der then-Methode zu schließen oder zu trennen. Eine bessere Lösung ist das Schließen der Verbindung in beiden Rückrufen in der Methode. Der Dummy-Code ist hier.

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');

});
  

0