为什么MongoDB节点驱动程序生成实例池会破坏错误?

时间:2016-08-19 01:43:53

标签: node.js mongodb

当我运行以下代码时,我收到错误消息' 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();
});

3 个答案:

答案 0 :(得分:45)

csv.foreachinsertOne来电(大概)都是异步的,因此您需要在插入完成之前调用db.close()

您需要提出一种等待db.close()致电的方式,直到所有插入内容为止。{p>已经调用了回调。如何做到这一点取决于你的csv模块如何工作,但使用async module之类的东西可以帮助实现异步流控制。

答案 1 :(得分:0)

我有一个同样的问题,在与异步npm一起调用'db.close()'之后,此问题得以解决。

答案 2 :(得分:0)

尝试使用for...of代替forEach。尽管我正在使用async / await,这解决了我的问题。