使用MongoClient v3.0时,当使用db.collection时,会出现“db.collection不是一个函数”的错误。

15 浏览
0 Comments

使用MongoClient v3.0时,当使用db.collection时,会出现“db.collection不是一个函数”的错误。

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

当我在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) {}

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

我遇到了同样的问题。在package.json中,将mongodb行更改为"mongodb": "^2.2.33"。您需要通过删除MongoDB驱动程序/ node_modules等来卸载mongodb npm,然后安装npm以安装此版本。

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

0
0 Comments

对于使用MongoDB本机NodeJS驱动程序的3.0版本的用户:

(这适用于在package.json中有“mongodb”:"^3.0.0-rc0"或更高版本,并希望继续使用最新版本的用户。)

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

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();
  });
}); 

0