Nodejs Mongodb TypeError:db.open不是函数

时间:2018-02-02 12:54:28

标签: javascript node.js mongodb

我刚开始尝试使用MongoDB。我收到错误消息TypeError: db.open is not a function。我可以看到new mongodb.Servernew mongodb.Db正在运作。

我使用mongodb@3.0.2 node_modules / mongodb。有什么建议吗?

module.exports = function () {
    /**
     * MongoDb database access
     *
     */
    var collections = {};
    var db;
    var mongodb = require('mongodb');
    var mongoDbConfig = {
        dbName: 'ngCodeCamper',
        host: 'localhost',
        port: 27017
    };

    // properties with getter functions for export
    Object.defineProperty(this, 'db', {
        get: function () {
            return db;
        }
    });
    Object.defineProperty(this, 'collections', {
        get: function () {
            return collections;
        }
    });

    openMongoDb();

    return {
        db: this.db,
        collections: this.collections
    };

    function openMongoDb() {
        /* jshint camelcase:false */
        var dbServer = new mongodb.Server(
            mongoDbConfig.host,
            mongoDbConfig.port,
            { auto_reconnect: true }
        );

        db = new mongodb.Db(mongoDbConfig.dbName, dbServer, {
            strict: true,
            w: 1,
            safe: true
        });

        console.log(db);

        // Open the DB then get the collections
        db.open(getAllCollections);

        function getAllCollections() {
            // Gets a handle for all of the collections.
            // We do this all at once to save effort later.
            var collectionNames = ['Persons', 'Rooms', 'Sessions', 'TimeSlots', 'Tracks'];
            var countDown = collectionNames.length;
            collectionNames.forEach(function (name) {
                db.collection(name, { strict: true }, function (err, collection) {
                    if (err) {
                        console.log('\n!!! Failed while getting MongoDb collections; is the MongoDb server running?');
                        throw new Error('Unable to locate collection ' + name + ': ' + err);
                    }
                    collections[name] = collection;
                    countDown -= 1;
                    if (countDown === 0) {
                        console.log('Retrieved collection handles: ' + collectionNames.join(', '));
                    }
                });
            });
        }
    }
};

2 个答案:

答案 0 :(得分:0)

mongodb软件包的v3.x版本对API进行了重大更改。而且API方法Db.prototype.open也已被删除,这就是为什么它显示错误的原因,因为您使用的是mongodb@3.0.2版本。
参考:https://github.com/mongodb/node-mongodb-native/blob/HEAD/CHANGES_3.0.0.md#api-changes

答案 1 :(得分:0)

是的,您需要使用 MongoClient 对象而不是 DB 对象。 DB 对象是 MongoClient 的一部分,上面提到的链接和 db.collection is not a function when using MongoClient v3.0

上的示例