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.
Sie können die Verbindung mit beenden
mongoose.connection.close()
Die andere Antwort hat bei mir nicht funktioniert. Ich musste mongoose.disconnect();
verwenden, wie in diese Antwort angegeben.
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();
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()
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();
});
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');
});