Why is the MongoDB Node Driver generating instance

2019-01-17 20:15发布

问题:

When I run the following code I am getting the error message 'MongoError: server instance pool was destroyed'. Any idea why or how to fix this?

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 and the insertOne calls are (presumably) both async, so you're calling db.close() before your inserts have completed.

You need to come up with a way of waiting to call db.close() until all your inserts' callbacks have been called. How to do that depends on how your csv module works, but using something like the async module can help with the async flow control.