Schließen der Mongodb-Verbindung in node.js, während viele Daten eingefügt werden

Ich versuche, ein Programm zu schreiben, um iis Protokolldaten in mongodb zu analysieren und einzufügen. Die Dateien sind nicht so groß, es sind ungefähr 600 Zeilen. Der Versuch, meine Management Nodejs und Mongodb zu überzeugen, ist besser als .net und SQL Server :).
Schauen Sie sich den folgenden Code in nodejs an. Logik: Ich analysiere jede Zeile und konvertiere sie in json und füge das save in db ein. Ich benutze mongonative Treiber.
Problem: Die Datenbankverbindung wird geschlossen, noch bevor alle Zeilen in die Datenbank eingefügt wurden.
Ich sehe, dass die Protokolldatei 6000 Zeilen hat, aber die Anzahl der Datensätze in DB ist nur ungefähr 4000. Ich verstehe, dass es sich um die asynchrone Eigenschaft von NodeJS handelt.

var MongoClient = require('mongodb').MongoClient;
var mongoServer = require('mongodb').Server;
var serverOptions = {
    'auto_reconnect': true,
    'poolSize': 5
};

var fs = require('fs');
var readline = require('readline');

var rd = readline.createInterface({
    input: fs.createReadStream('C:/logs/Advisor_Metrics/UI/P20VMADVSRUI01/u_ex130904.log'),
    output: process.stdout,
    terminal: false
});
var mongoClient = new MongoClient(new mongoServer('localhost', 27017, serverOptions));
var db = mongoClient.db('test');
var collection = db.collection('new_file_test');
var cntr = 0;
mongoClient.open(function (err, mongoClient) {
    console.log(err);
    if (mongoClient)
    {        
        rd.on('line', function (line) {
            if (line.indexOf('#') == -1) {
                var lineSplit = line.split(' ');
                var data =
                {
                    d: lineSplit[0],
                    t: lineSplit[1],
                    sip: lineSplit[2],
                    met: lineSplit[3],
                    uri: lineSplit[4],
                    cip: lineSplit[8],
                    cua: lineSplit[9],
                    stat: lineSplit[10],
                    tt: lineSplit[13]
                };

                collection.insert(data, function (err, docs) {
                    console.log('closing connection');
                    //db.close();
                });
            }
        });
    }
})
rd.on('close', function () {
    db.close();
});

Sol 1: Eine Lösung wäre, die JSON-Objekte zu analysieren und in ein Array einzufügen und das Array zu Mongodb hinzuzufügen. Ich würde das nicht gerne tun, da dies das Parsen der gesamten großen Protokolldatei in den Speicher erfordern würde! Gibt es eine andere Lösung?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage