MongoDB Node.js驱动v3.1.10获取集合名报错,求文档及正确查询方式
问题解答
一、MongoDB Node.js驱动的文档参考
你安装的mongodb@3.1.10驱动包本身就带有完整的文档,直接查看本地node_modules/mongodb/docs/目录下的文件就能找到API说明和示例,另外驱动根目录的README.md里也有快速入门的代码示例,足够解决基础操作问题。
二、正确获取集合名称的方式
你遇到的错误本质是数据库还没建立连接就调用了listCollections方法,此时serverConfig还未初始化,导致capabilities()返回null触发报错。下面给出两种可行的写法:
1. 基于你当前使用的Db和Server旧API
需要先调用db.open()完成连接,再执行集合查询:
const Db = require('mongodb').Db const Server = require('mongodb').Server const dbName = '你的数据库名'; const host = 'localhost'; const port = 27017; const options = {}; const db = new Db(dbName, new Server(host, port, options), {}); // 先建立数据库连接 db.open((connectErr, dbInstance) => { if (connectErr) { console.error('数据库连接失败:', connectErr); return; } // 连接成功后再获取集合列表 dbInstance.listCollections().toArray((listErr, collections) => { if (listErr) { console.error('获取集合列表失败:', listErr); } else { // 提取集合名称(返回的结果是包含集合详情的对象数组) const collectionNames = collections.map(item => item.name); console.log('所有集合名称:', JSON.stringify(collectionNames)); } // 操作完成后关闭连接 dbInstance.close(); }); });
2. 推荐使用更现代的MongoClientAPI(旧API已被标记为废弃)
这是驱动3.x版本推荐的连接方式,代码更简洁:
const MongoClient = require('mongodb').MongoClient; const uri = `mongodb://localhost:27017/${dbName}`; const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); client.connect(connectErr => { if (connectErr) { console.error('连接失败:', connectErr); return; } const db = client.db(dbName); db.listCollections().toArray((listErr, collections) => { if (listErr) { console.error('获取集合失败:', listErr); } else { const collectionNames = collections.map(item => item.name); console.log('所有集合名称:', JSON.stringify(collectionNames)); } // 关闭客户端连接 client.close(); }); });
内容的提问来源于stack exchange,提问作者iyerrama29
相关产品推荐
相关产品推荐

