我一直在尝试W3schools tutorial在带有 MongoDB 的 nodeJS 上。
当我尝试在 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)
请在下面找到我实现的代码:
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) {}
另外,请注意(以防万一)我已经为 node JS 安装了最新的 MongoDB 包(npm install mongodb),并且 MongoDB 版本是 MongoDB Enterprise 3.4.4,带有 MongoDB Node .js驱动v3.0.0-rc0。
最佳答案
对于 MongoDB 原生 NodeJS 驱动程序 3.0 版的用户:
(适用于“mongodb”:“^3.0.0-rc0”或package.json中的更高版本,希望继续使用最新版本的人。)
在 MongoDB native NodeJS driver 的 2.x 版中您将获得数据库对象作为连接回调的参数:
MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => {
// Database returned
});
根据changelog对于 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();
});
});
关于node.js - 使用 MongoClient v3.0 时 db.collection 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662220/