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

使用Node.js与MongoClient获取MongoDB集合名称失败求助

问题分析与解决方案

你的代码存在三个关键问题导致无法运行:

  1. 异步方法未正确处理:listDatabases()是异步方法,返回的是Promise对象,不能直接同步访问其databases属性
  2. 变量名笔误:循环内的$db是错误写法,应该改为db
  3. 缺少连接确认步骤:即使你说已连接,代码中未显式确保客户端完成连接(建议显式调用connect())

修正后的代码(使用async/await)

const client = new MongoClient(uri);

async function printDatabases() {
  try {
    // 确保客户端连接成功
    await client.connect();
    // 异步获取数据库列表
    const databasesList = await client.db().admin().listDatabases();
    // 遍历打印数据库名称
    databasesList.databases.forEach(db => {
      console.log(db.name);
    });
  } catch (err) {
    console.error(err);
  } finally {
    // 操作完成后关闭连接
    await client.close();
  }
}

printDatabases();

备选写法(使用.then()链式调用)

如果你不习惯async/await,也可以用Promise链式处理:

const client = new MongoClient(uri);

client.connect()
  .then(() => client.db().admin().listDatabases())
  .then(databasesList => {
    databasesList.databases.forEach(db => {
      console.log(db.name);
    });
  })
  .catch(err => console.error(err))
  .finally(() => client.close());

如果你的需求是打印集合名称(不是数据库名称),那需要针对特定数据库遍历集合,代码示例如下:

async function printCollections() {
  try {
    await client.connect();
    // 指定要查询的数据库,比如替换成你的数据库名"mydb"
    const db = client.db("mydb");
    const collections = await db.listCollections().toArray();
    collections.forEach(col => {
      console.log(col.name);
    });
  } catch (err) {
    console.error(err);
  } finally {
    await client.close();
  }
}

printCollections();

内容的提问来源于stack exchange,提问作者Daniel swisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:20:27