在Node.js中使用Mongoose获取MongoDB数据库及其集合
获取MongoDB所有数据库及其集合的简便方法
不需要分两次手动操作,可以通过MongoDB的原生命令或驱动代码一次性获取所有数据库及其集合,并生成你需要的JSON格式结构。
方法一:使用Mongo Shell(MongoDB Compass内置Shell也可用)
打开Mongo Shell(或在Compass的「Shell」标签页中),运行以下脚本即可直接生成目标格式的结果:
const dbCollectionsMap = {}; // 获取所有数据库列表 const allDatabases = db.adminCommand('listDatabases').databases; // 遍历每个数据库,获取其集合列表 allDatabases.forEach(dbItem => { const dbName = dbItem.name; // 可选:跳过系统数据库(admin、local、config),如果需要包含可删除此判断 if (['admin', 'local', 'config'].includes(dbName)) return; // 获取当前数据库的所有集合名称 const collections = db.getSiblingDB(dbName) .listCollections() .toArray() .map(col => col.name); dbCollectionsMap[dbName] = collections; }); // 打印格式化后的JSON结果 printjson(dbCollectionsMap);
运行后会直接输出符合你需求的JSON结构,你可以复制使用。
方法二:通过Node.js驱动代码实现
如果你需要在代码中自动生成该结构,可以使用MongoDB Node.js驱动编写如下代码:
const { MongoClient } = require('mongodb'); async function generateDbCollectionsMap() { // 替换为你的MongoDB连接字符串 const connectionUri = 'mongodb://localhost:27017'; const client = new MongoClient(connectionUri); try { await client.connect(); const dbCollectionsMap = {}; // 获取所有数据库 const databases = await client.db().admin().listDatabases(); for (const dbInfo of databases.databases) { const dbName = dbInfo.name; // 跳过系统数据库 if (['admin', 'local', 'config'].includes(dbName)) continue; // 获取当前数据库的集合列表 const collections = await client.db(dbName).listCollections().toArray(); dbCollectionsMap[dbName] = collections.map(col => col.name); } // 输出格式化后的JSON console.log(JSON.stringify(dbCollectionsMap, null, 2)); } finally { // 关闭连接 await client.close(); } } // 执行函数 generateDbCollectionsMap().catch(err => console.error(err));
补充说明
- MongoDB Compass本身没有直接导出这种结构的功能,但通过其内置的Shell运行上述脚本即可快速得到结果。
- 如果需要包含系统数据库,只需删除代码中判断跳过系统库的逻辑即可。
内容的提问来源于stack exchange,提问作者Gabriel Dufour
相关产品推荐
相关产品推荐

