Docs 菜单
Docs 主页
/ / /
Laravel MongoDB
/

数据库和集合

在此页面上

  • Overview
  • 在连接配置中指定数据库
  • 访问集合
  • listCollections
  • 运行shell命令
  • 调用数据库或模式方法
  • 列出集合字段
  • 运行shell命令
  • 调用模式方法
  • 创建和拖放集合

在本指南中,您可以了解如何使用 Laravel MongoDB 访问和管理 MongoDB 数据库和集合。

MongoDB以分层结构组织数据。 MongoDB 部署包含一个或多个数据库,每个数据库又包含一个或多个集合。 在每个集合中, MongoDB将数据存储为包含字段和值对的文档。 在 Laravel 集成中,您可以通过 Eloquent 模型访问权限文档。

要了解有关文档数据格式的更多信息,请参阅 MongoDB Server手册中的 文档 。

您可以在应用程序的 config/database.php文件中指定连接使用的数据库名称。 此文件中的 connections 属性存储所有数据库连接信息,例如连接string 、数据库名称以及可选的身份验证详细信息。 指定数据库连接后,您可以执行数据库级操作并访问数据库包含的集合。

如果您设立database属性中的数据库名称设置为不存在的数据库的名称,Laravel 仍会建立有效连接。 将任何数据插入数据库中的集合时,服务器都会自动创建该数据。

以下示例展示了如何设立默认数据库连接,并通过设置dsndatabase属性在config/database.php文件中创建与animals数据库的数据库连接:

'default' => 'mongodb',
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'animals',
], ...
]

当您设立默认数据库连接时,Laravel 集成会使用该连接进行操作,但您可以在config/database.php文件中指定多个数据库连接。

以下示例展示如何指定多个数据库连接( mongodbmongodb_alt )来访问权限animalsplants数据库:

'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'animals',
],
'mongodb_alt' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'plants',
]
], ...

注意

MongoDBPHP当您使用相同的连接 创建两个客户端时,string 驾驶员会重复使用相同的连接。对两个不同的数据库使用两个连接没有开销,因此没有必要优化连接。

如果您的应用程序包含多个数据库连接,并且您希望将模型存储在默认数据库以外的数据库中,请覆盖Model类中的$connection属性。

以下示例展示了如何覆盖Flower模型类上的$connection属性以使用mongodb_alt连接。 这会指示 Laravel 集成将模型存储在plants数据库的flowers集合中,而不是存储在默认数据库中:

class Flower extends Model
{
protected $connection = 'mongodb_alt';
}

当您创建扩展MongoDB\Laravel\Eloquent\Model的模型类时,Laravel 集成会将模型数据存储在集合中,其名称格式为模型类名称的蛇形命名法复数形式。

例如,如果您创建一个名为Flower的模型类,Laravel 则会将该模型应用于数据库中的flowers集合。

提示

要学习;了解如何在模型类中指定不同的集合名称,请参阅 Eloquent 模型类指南的更改模型集合名称部分。

我们通常建议您使用 Eloquent ORM 来访问集合,以提高代码的可读性和可维护性。 以下示例使用Flower类指定查找操作,以便 Laravel 从flowers集合中检索结果:

Flower::where('name', 'Water Lily')->get()

注意

从 Laravel Integration v 4.8开始, DB::collection()方法已弃用。 如以下示例所示,您可以使用DB::table()方法访问权限MongoDB集合。

如果使用 Eloquent 模型无法完成操作,则可以通过调用DB门面上的table()方法来访问查询构建器。 以下示例显示了与上一示例相同的查询,但该查询是使用DB::table()方法构造的:

DB::connection('mongodb')
->table('flowers')
->where('name', 'Water Lily')
->get()

您可以执行以下任一操作来查看有关数据库中集合的信息:

您可以在项目根目录下的shell中运行以下命令,从而列出数据库中的集合:

php artisan db:show

此命令输出有关已配置数据库的信息,并在 Table 标头下列出其集合。有关db:show 命令的更多信息,请参阅 Laravel 官方博客上的新数据库命令

您可以通过在应用程序中调用以下方法来列出数据库中的集合:

  • DB::listCollections():使用查询构建器列出有关每个集合的信息

  • Schema::getTablesListing():使用模式构建器列出每个集合的名称

  • Schema::getTables():使用模式构建器列出每个集合的名称和大小

注意

MongoDB是无模式数据库,因此前面的模式构建器方法会查询数据库数据而不是模式。

以下示例访问数据库连接,然后调用listCollections()查询构建器方法来检索有关数据库中集合的信息:

$collections = DB::connection('mongodb')->getMongoDB()->listCollections();

您可以执行以下任一操作来查看有关集合中每个字段的信息:

您可以通过在shell中项目根目录运行以下命令来查看集合中的字段列表:

php artisan db:table <collection name>

此命令输出Column标头下的每个集合字段及其相应的数据类型。 有关db:table 命令的更多信息,请参阅 Laravel:新的数据库命令 在 Laravel 官方博客。

您可以通过调用应用程序中的Schema::getColumns()模式构建器方法来列出集合中的字段。

您还可以使用以下方法返回有关集合字段的更多信息:

  • Schema::hasColumn(string $<collection>, string $<field name>):检查指定字段是否存在于至少一个文档中

  • Schema::hasColumns(string $<collection>, string[] $<field names>):检查每个指定字段是否存在于至少一个文档中

MongoDB是无模式数据库,因此上述方法查询的是集合数据,而不是数据库模式。 如果指定的集合不存在或为空,这些方法将返回值false

注意

id Alias

从 Laravel MongoDB v 5.1 开始,getColumns() 方法将MongoDB集合中的 _id字段名称表示为返回的字段名称列表中的别名 id。您可以将 _idid 传递给 hasColumn()hasColumns() 方法。

以下示例将集合名称传递给Schema::getColumns()方法以检索flowers集合中的每个字段:

$fields = Schema::getColumns('flowers');

要了解如何创建和删除集合,请参阅模式生成器指南中的执行 Laravel 迁移部分。

后退

启用和配置 TLS