2016-08-19 4 views
13

次のコードを実行すると、エラーメッセージ 'MongoError:サーバーインスタンスプールが破損しました'が表示されます。どのようなアイデアか、これを修正する方法は?MongoDB Node Driverがインスタンスプールを生成する際に、エラーが破棄されるのはなぜですか?

var csv = require('./importer.js'); 
var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 
var ObjectId = require('mongodb').ObjectID; 
var url = 'mongodb://.....'; 


MongoClient.connect(url, function(err, db) { 

    assert.equal(null, err); 
    console.log("Connected correctly to server."); 

    csv.foreach('data/airports.csv', function(airport){ 
     db.collection('airports').insertOne(airport, function(err, result) { 
      if(err) { 
       console.log(err) 
      } else { 
       console.log("Inserted: " + airport.ident); 
      } 
     }); 
    }); 

    db.close(); 
}); 

答えて

22

csv.foreachinsertOneコール(おそらく)の両方非同期なので、あなたの挿入が完了する前に、あなたはdb.close()を呼んでいます。

すべてのインサートのコールバックが呼び出されるまでdb.close()に電話するのを待つ方法を考え出す必要があります。どのようにするかは、CSVモジュールの動作方法によって異なりますが、async moduleのようなものを使用すると、非同期フロー制御に役立ちます。

関連する問題