Arbeiten mit Nodejs und MongoDB über den nativen Node MongoDB-Treiber. Sie müssen einige Dokumente abrufen, Änderungen vornehmen und sie dann sofort wieder speichern. Dies ist ein Beispiel:
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc); // Update the document
} else {
db.close(); // Closing the connection
}
});
});
});
Bei asynchroner Natur wird die Datenbankverbindung geschlossen, wenn der Aktualisierungsvorgang des Dokuments länger dauert. Wenn der Cursor das Ende der Dokumente erreicht. Nicht alle Updates werden in der Datenbank gespeichert.
Wenn das db.close()
weggelassen wird, werden alle Dokumente korrekt aktualisiert, aber die Anwendung hängt, wird nie beendet.
Ich habe einen Beitrag gesehen, in dem vorgeschlagen wurde, einen Zähler zu verwenden, um die Anzahl der Aktualisierungen zu verfolgen. Wenn Sie auf Null zurückfallen, schließen Sie die Datenbank. Aber mache ich hier etwas falsch? Was ist der beste Weg, um mit dieser Art von Situation umzugehen? Muss db.close()
verwendet werden, um Ressourcen freizusetzen? Oder muss eine neue Datenbankverbindung geöffnet werden?