使用Node.js与MongoClient获取MongoDB集合名称失败求助
问题分析与解决方案
你的代码存在三个关键问题导致无法运行:
- 异步方法未正确处理:
listDatabases()是异步方法,返回的是Promise对象,不能直接同步访问其databases属性 - 变量名笔误:循环内的
$db是错误写法,应该改为db - 缺少连接确认步骤:即使你说已连接,代码中未显式确保客户端完成连接(建议显式调用
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
相关产品推荐
相关产品推荐

