fechando a conexão mongodb em node.js ao inserir muitos dados
Eu estou tentando escrever um programa para analisar e inserir dados iis logs no mongodb. Os arquivos não são tão grandes, são cerca de 600 linhas. Tentando convencer o meu gerenciamento nodejs e mongodb é melhor para isso em comparação com o servidor .net e sql :).
Dê uma olhada no código abaixo em nodejs. Lógica: Eu analiso cada linha e converso em json e insiro o salvamento em db. Eu estou usando o driver mongonative.
Problema: a conexão do banco de dados é fechada mesmo antes de todas as linhas serem inseridas no banco de dados.
Eu vejo o arquivo de log tem 6000 linhas, mas num de registros em db é apenas arnd 4000. Eu entendo que é característica assíncrona do nodejs, neste como posso fechar a conexão de forma mais determinista (depois de verificar se todas as linhas foram inseridas)?
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: Uma solução seria analisar os objetos json e adicionar em uma matriz e adicionar a matriz ao mongodb. Eu não gostaria de fazer isso desde que gostaria de analisar todo o enorme arquivo de log na memória !, Qualquer outra solução?