2013-05-15 3 views
1

Я использую mongojs для обновления данных в коллекции mongodb. Программа читает файл по строкам, и для каждой строки он делает обновление в базе данных mongodb. Обновление работает нормально, но элемент управления не возвращается.Обратный вызов Mongojs не возвращается

var fs = require('fs') 
var reader = require('buffered-reader'); 
var dataReader = reader.DataReader; 

var mongojs = require('mongojs') 
var db = mongojs.connect('testdb'); 
var col = db.collection('testCollection'); 

var file = "sample.txt"; 

var loadData = function (line) { 
    record = line.split(","); 
    rec_key = record[1]; 
    col.update(
     {rec_key: rec_key}, 
     {rec_key: rec_key, 
     data: 5678}, 
     {upsert:true}, function(err){}); 
} 

new dataReader (file, { encoding: "utf8" }) 
    .on ("error", function(error){ 
      console.log ("error: " + error); 
     }) 
    .on ("line", loadData) 
    .on ("end", function (end){ 
      console.log("EOF"); 
     }).read(); 

После выполнения этого процесса с узла элемент управления не возвращается. Программа работает бесконечно. Если я комментирую функцию loadData в dataReader, он отлично работает, программа заканчивается после итерации по всем строкам.

Как заставить программу подойти к концу после итерации по всем линиям и сделать обновление в mongodb?

ответ

1

Вам необходимо закрыть свое соединение MongoDB, когда вы закончите с ним, или он будет держать программу открытой.

Что-то вроде:

.on ("end", function (end){ 
     console.log("EOF"); 
     db.close(); 
    } 
0
col.update(
    {rec_key: rec_key}, 
    {rec_key: rec_key, 
    data: 5678}, 
    {upsert:true}, function(err){ 
     if(err) 
      //return false 
     else 
      //return true 
    }); 
+0

Не работает. Я все еще сталкиваюсь с той же проблемой. Программа работает бесконечно –

0

Я хотел бы предложить вам попробовать использовать Node.js родной драйвер вместо как вы можете использовать последнюю версию.

Смежные вопросы