Docs 菜单

插入文档

在本指南中,您可以学习;了解如何使用 Laravel MongoDB从 Laravel应用程序将文档插入MongoDB集合。

插入文档时,请确保数据不违反集合上的任何唯一索引。插入集合的第一个文档或创建新集合时, MongoDB会自动在 _id字段上创建唯一索引。

有关使用 Laravel模式构建器在MongoDB集合上创建索引的更多信息,请参阅模式构建器文档的 管理索引部分。

要学习;了解有关 Laravel 集成中的 Eloquent 模型的更多信息,请参阅 Eloquent模型部分。

本指南中的操作引用了以下 Eloquent 模型类:

Community.php
<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Concert extends Model
{
protected $connection = 'mongodb';
protected $fillable = ['performer', 'venue', 'genres', 'ticketsSold', 'performanceDate'];
protected $casts = ['performanceDate' => 'datetime'];
}

提示

$fillable属性允许您对插入操作使用 Laravel 批量分配。 要学习;了解有关批量分配的更多信息,请参阅 Eloquent 模型类文档中的自定义批量分配

$casts属性指示 Laravel 将属性转换为常见数据类型。要学习;了解更多信息,请参阅 Laravel 文档中的 属性转换 。

本节中的示例展示了如何使用 save()create() Eloquent 方法将 Concert 模型的实例作为MongoDB文档插入。

save()方法成功时,您可以访问权限调用该方法的模型实例。

如果操作失败,则会为模型实例分配null

此示例代码执行以下操作:

  • 创建Concert模型的新实例

  • performervenue 字段分配string值

  • 将字符串数组赋值给genre字段

  • ticketsSold字段分配一个数字

  • 使用Carbon包为performanceDate字段分配日期

  • 通过调用save()方法插入文档

$concert = new Concert();
$concert->performer = 'Mitsuko Uchida';
$concert->venue = 'Carnegie Hall';
$concert->genres = ['classical'];
$concert->ticketsSold = 2121;
$concert->performanceDate = Carbon::create(2024, 4, 1, 20, 0, 0, 'EST');
$concert->save();

您可以通过访问模型的id成员来检索插入文档的_id值,如以下代码示例所示:

$insertedId = $concert->id;

如果通过定义$fillable$guarded属性来启用批量分配,则可以使用 Eloquent 模型的create()方法在单次调用中执行插入,如以下示例所示:

$insertResult = Concert::create([
'performer' => 'The Rolling Stones',
'venue' => 'Soldier Field',
'genres' => [ 'rock', 'pop', 'blues' ],
'ticketsSold' => 59527,
'performanceDate' => Carbon::create(2024, 6, 30, 20, 0, 0, 'CDT'),
]);

要了解有关CarbonPHPAPI 扩展的更多信息,请参阅 CarbonGithub 存储库。

此示例演示如何使用insert() Eloquent 方法将Concert模型的多个实例作为MongoDB文档插入。 这种批量插入方法减少了应用程序为保存文档所需进行的调用次数。

insert() 方法成功时,将返回值 1。如果失败,则会引发异常。

以下示例通过将多个模型作为大量传递给 insert() 方法,在一次调用中保存多个模型:

$data = [
[
'performer' => 'Brad Mehldau',
'venue' => 'Philharmonie de Paris',
'genres' => [ 'jazz', 'post-bop' ],
'ticketsSold' => 5745,
'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')),
],
[
'performer' => 'Billy Joel',
'venue' => 'Madison Square Garden',
'genres' => [ 'rock', 'soft rock', 'pop rock' ],
'ticketsSold' => 12852,
'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')),
],
];
Concert::insert($data);

注意

此示例将日期包装在 MongoDB\BSON\UTCDateTime 类以将其转换为 MongoDB 可以序列化的类型,因为 Laravel 在批量插入操作上会跳过属性转换。

要查看演示如何使用 Laravel 集成插入文档的可运行代码示例,请参阅以下用法示例:

要学习;了解如何修改MongoDB中已有的数据,请参阅修改文档指南。