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

Laravel中使用jensseger/mongodb切换连接后如何获取当前数据库?

问题描述

我正在使用兼容Laravel 9的旧版jensseger/mongodb库。

我的MongoDB连接配置如下:

'mongodb' => [
      'driver'   => 'mongodb',
      'host'     => env('MONGODB_HOST', 'localhost'),
      'port'     => env('MONGODB_PORT', 27017),
      'database' => env('MONGODB_DATABASE'),
      'username' => env('MONGODB_USERNAME'),
      'password' => env('MONGODB_PASSWORD'),
      'options'  => [
                'database' => env('MONGODB_DATABASE')
      ]
],

需求说明:当新供应商注册时自动创建新数据库,目前我通过以下代码切换数据库连接:

DB::disconnect('mongodb'); // Connection name
DB::purge('mongodb');
Config::set('database.connections.mongodb.database', $databaseName);
Config::set('database.connections.mongodb.options.database', $databaseName);
DB::reconnect('mongodb');

我可以通过以下代码获取所有数据库列表:

$data = DB::connection('mongodb')->getMongoClient()->listDatabases();
print_r($data);

请问:如何获取当前MongoDB连接对应的数据库?

解决方案

针对旧版jensseger/mongodb库,你可以用这几种方法拿到当前连接的数据库:

  1. 直接读取Laravel配置
    既然切换数据库时你已经修改了配置项,直接从配置里取值即可:
// 获取当前数据库名
$currentDb = Config::get('database.connections.mongodb.database');
  1. 从MongoDB连接实例中获取
    调用getMongoDB()方法拿到当前连接的数据库对象,再获取其名称:
$currentDb = DB::connection('mongodb')->getMongoDB()->getName();
  1. 从Mongo客户端的默认数据库获取
    如果你的连接已经设置了默认数据库,也可以通过客户端实例获取:
$currentDb = DB::connection('mongodb')->getMongoClient()->getDefaultDatabase()->getName();

这几种方法都能有效获取当前连接的数据库名称,根据你的使用场景选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:06:07