Почему MongoDB Node Драйвер генерирует пул экземпляров уничтоженных ошибок?
Когда я запускаю следующий код, я получаю сообщение об ошибке " MongoError: пул экземпляров сервера был уничтожен". Любая идея, почему и как это исправить?
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();
});
Ответы
Ответ 1
csv.foreach
, а вызовы insertOne
являются (предположительно) и асинхронными, поэтому вы вызываете db.close()
до завершения ваших вставок.
Вам нужно придумать способ ожидания вызова db.close()
, пока не будут вызваны все обратные вызовы ваших вставок. Как это сделать, зависит от того, как работает ваш модуль csv, но используя что-то вроде асинхронного модуля, может помочь с управлением потоком асинхронизации.
Ответ 2
У меня та же проблема, после вызова db.close() вместе с async npm, эта проблема решена.