You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB与Node.js结合报错:TypeError: db.collection is not a function 求助

解决TypeError: db.collection is not a function的问题

这个问题我之前调试代码时也踩过坑,根源是MongoDB Node.js驱动版本的差异,具体来说:

  • 在MongoDB驱动3.0及以上版本中,MongoClient.connect的回调函数第二个参数不再直接返回数据库实例,而是返回一个MongoClient客户端对象。你现在的代码是按照2.x旧版本的写法编写的,自然会找不到collection方法,从而抛出这个错误。

修正后的代码

你只需要调整回调里的逻辑,先通过客户端对象获取目标数据库,再调用collection方法,同时记得操作完成后关闭客户端连接:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://abc:12345**@xxxx.mlab.com:&&&&/myDB";

MongoClient.connect(url, function(err, client) {
  if(err) {
    console.log(err);
    return;
  } 
  console.log("Database created!");
  // 获取指定数据库实例
  const db = client.db('myDB');
  db.collection('users').aggregate([
    { '$match': { 'organization.organizationId': "e1716c62-fdce-11e7-8be5-0ed5f89f718b" } },
    { "$project": { "deviceDetails": 1, "userDetails": 1 } }
  ], function(error, documents) {
    if (error) {
      console.error(error);
    } else {
      console.log(documents);
    }
    // 操作完成后关闭客户端连接
    client.close();
  });
});

额外提示

如果你的项目依赖的是旧版本驱动(2.x),也可以继续用原来的写法,但更建议升级到最新稳定版,同时改用异步/await的写法让代码更易读:

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://abc:12345**@xxxx.mlab.com:&&&&/myDB";

async function run() {
  let client;
  try {
    client = await MongoClient.connect(url);
    console.log("Database created!");
    const db = client.db('myDB');
    const documents = await db.collection('users').aggregate([
      { '$match': { 'organization.organizationId': "e1716c62-fdce-11e7-8be5-0ed5f89f718b" } },
      { "$project": { "deviceDetails": 1, "userDetails": 1 } }
    ]).toArray();
    console.log(documents);
  } catch (err) {
    console.error(err);
  } finally {
    if (client) {
      await client.close();
    }
  }
}

run();

内容的提问来源于stack exchange,提问作者Rahul Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:41:27