使用 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)

请在下面找到我实现的代码:

 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 ( npm install mongodb ) 安装了最新的 MongoDB 包,并且 MongoDB 版本是 MongoDB Enterprise 3.4.4,带有 MongoDB Node.js 驱动程序 v3.0.0-rc0。

原文由 Elie Asmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 440
2 个回答

我遇到了同样的事情。在 package.json 中,将 mongodb 行更改为“mongodb”:“^2.2.33”。您需要通过删除 MongoDB Driver/ node_modules 或 etc 来卸载 mongodb npm,然后安装 npm 以安装此版本。

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

原文由 AyoO 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于使用 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();
  });
});

原文由 Mika Sundland 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题