Laravel使用jenssegers mongodb库时如何获取MongoDB所有数据库名
获取MongoDB服务器上所有数据库名称(Laravel + jenssegers/mongodb)
嗨,我之前做项目的时候也碰到过一模一样的需求——翻遍了Laravel文档和jenssegers/mongodb的封装API,都没找到直接获取所有数据库名称的方法。后来发现其实可以绕开封装,直接调用MongoDB官方PHP扩展的原生方法来实现,步骤很简单:
步骤1:获取原生MongoDB客户端实例
jenssegers的数据库连接类其实封装了官方的MongoClient对象,我们可以直接把它取出来:
use Illuminate\Support\Facades\DB; // 获取你配置的MongoDB连接实例(默认是'mongodb',如果有自定义连接名就替换成你的) $mongoConnection = DB::connection('mongodb'); // 提取原生的MongoDB Client对象 $mongoClient = $mongoConnection->getMongoClient();
步骤2:调用listDatabases获取所有数据库
原生客户端自带listDatabases()方法,会返回包含所有数据库信息的数组,我们只需要提取其中的name字段即可:
// 获取所有数据库的完整信息 $allDatabases = $mongoClient->listDatabases(); // 提取数据库名称列表 $dbNameList = array_column($allDatabases, 'name'); // 现在$dbNameList就是你要的数组啦,比如['college_1', 'college_2', 'college_3'] dd($dbNameList);
注意事项
- 确保你的MongoDB账号拥有
listDatabases的权限,不然会返回空数组或者抛出权限错误。 - 如果是比较老版本的jenssegers/mongodb,可能
getMongoClient()方法名是getClient(),如果上面的代码报错,可以试试替换成这个方法名。
内容的提问来源于stack exchange,提问作者user8757355
相关产品推荐
相关产品推荐

