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

MongoDB新手求助:如何通过Simba JDBC驱动列出所有数据库?

用Simba JDBC驱动列出MongoDB所有数据库的方法

嘿,我懂你作为MongoDB新手的烦恼——之前只能拿到连接URL里指定的数据库,确实有点挫败,但其实完全可以列出所有数据库!我给你两种靠谱的方法,一步步来:

方法一:用JDBC标准的DatabaseMetaData获取

MongoDB的数据库在JDBC体系里对应Catalog,所以我们可以通过DatabaseMetaData的getCatalogs()方法来获取所有数据库列表。你之前的连接URL没问题(指定admin库是用来做权限验证的,不影响获取其他库),只需要在连接后加几行代码:

import java.sql.*;

public class ListMongoDBDatabases {
    public static void main(String[] args) {
        try {
            // 加载驱动(JDBC4+版本其实可以省略这行,但写上更稳妥)
            Class.forName("com.simba.mongodb.jdbc4.Driver");
            
            // 建立连接,这里的admin是认证用的数据库,不影响获取其他库
            String url = "jdbc:mongodb://admin:admin@localhost:27017/admin";
            Connection conn = DriverManager.getConnection(url);
            
            // 获取DatabaseMetaData对象
            DatabaseMetaData metaData = conn.getMetaData();
            
            // 获取所有Catalog(对应MongoDB的数据库)
            ResultSet rs = metaData.getCatalogs();
            
            // 遍历结果集输出数据库名称
            System.out.println("所有MongoDB数据库:");
            while (rs.next()) {
                String dbName = rs.getString("TABLE_CAT");
                System.out.println("- " + dbName);
            }
            
            // 关闭资源
            rs.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方法二:执行MongoDB原生命令

如果你更习惯MongoDB的原生操作逻辑,也可以通过JDBC执行listDatabases命令,直接拿到数据库列表:

import java.sql.*;

public class ListMongoDBDatabasesNative {
    public static void main(String[] args) {
        try {
            Class.forName("com.simba.mongodb.jdbc4.Driver");
            String url = "jdbc:mongodb://admin:admin@localhost:27017/admin";
            Connection conn = DriverManager.getConnection(url);
            
            // 创建Statement执行MongoDB命令
            Statement stmt = conn.createStatement();
            // 执行listDatabases命令,Simba驱动支持直接用MongoDB原生命令语法
            ResultSet rs = stmt.executeQuery("{listDatabases: 1}");
            
            // 解析结果集
            if (rs.next()) {
                // 获取databases数组
                Array databasesArray = rs.getArray("databases");
                Object[] databases = (Object[]) databasesArray.getArray();
                
                System.out.println("所有MongoDB数据库:");
                for (Object dbObj : databases) {
                    // 每个数据库对象是Struct类型,提取name字段
                    Struct dbStruct = (Struct) dbObj;
                    String dbName = (String) dbStruct.getAttributes()[0];
                    System.out.println("- " + dbName);
                }
            }
            
            // 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

重要提醒

要确保你的MongoDB用户(这里是admin)有足够的权限,比如readAnyDatabase或者userAdminAnyDatabase权限,不然可能看不到所有数据库。如果权限不够,需要先在MongoDB Shell里给用户授权:

use admin
db.grantRolesToUser("admin", [{ role: "readAnyDatabase", db: "admin" }])

这样就能顺利列出所有数据库啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:45:58