使用MongoClient v3.0时,db.collection不是一个函数

我一直在尝试使用MongoDB在nodeJS上的W3schools教程 。

当我尝试在nodeJS环境中实现这个例子,并用AJAX调用调用函数时,我得到了下面的错误:

TypeError: db.collection is not a function at c:\Users\user\Desktop\Web Project\WebService.JS:79:14 at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5 at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) 

请在下面find我实施的代码:

 var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/mytestingdb"; MongoClient.connect(url, function(err, db) { if (err) throw err; db.collection("customers").findOne({}, function(err, result) { if (err) throw err; console.log(result.name); db.close(); }); }); 

请注意,只要执行命中就会发生错误:

 db.collection("customers").findOne({}, function(err, result) {} 

另外,请注意(如果有的话),我已经安装了最新的节点JS的MongoDB包( npm install mongodb ),而MongoDB的版本是MongoDB Enterprise 3.4.4,包含MongoDB Node.js驱动程序v3.0.0-rc0。

我遇到了同样的事情。 在package.json中,将mongodb行更改为“mongodb”:“^ 2.2.33”。 你将需要npm卸载mongodb; 然后npm安装来安装这个版本。

这为我解决了这个问题。 似乎是一个错误或文档需要更新。

对于MongoDB本地NodeJS驱动程序版本3.0的人员:

(这适用于具有“mongodb”的人:“^ 3.0.0-rc0”,或者package.json中的一个更新版本,需要继续使用最新版本。)

在MongoDB本地NodeJS驱动程序的 2.x版本中,您将获得数据库对象作为连接callback的参数:

 MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => { // Database returned }); 

根据3.0的更新日志 ,你现在得到一个包含数据库对象的客户端对象:

 MongoClient.connect('mongodb://localhost:27017', (err, client) => { // Client returned var db = client.db('mytestingdb'); }); 

close()方法也被移到客户端。 问题中的代码因此可以转换为:

 MongoClient.connect('mongodb://localhost', function (err, client) { if (err) throw err; var db = client.db('mytestingdb'); db.collection('customers').findOne({}, function (findErr, result) { if (findErr) throw findErr; console.log(result.name); client.close(); }); });