我刚开始尝试使用MongoDB。我收到错误消息TypeError: db.open is not a function
。我可以看到new mongodb.Server
和new 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(', '));
}
});
});
}
}
};
答案 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
上的示例