对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

插入文档

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

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

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

要学习;了解有关 Laravel 集成中的 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'),
]);

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

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

以下示例通过将多个模型作为大量传递给 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 在批量插入操作上跳过属性转换。

以下部分提供了完全可运行的代码示例,演示了如何使用 Laravelsample_mflix.movies 集成插入文档。这些示例使用Atlas示例数据集中的 集合。

提示

您可以从自己的 Laravel应用程序或入门教程中创建的my-app 应用程序运行完整示例。这些示例使用本教程中创建的Movie.php 模型类来演示movies MongoDB集合上的操作。要运行该操作,您可以将示例代码复制到 Laravel应用程序中的控制器端点。

要查看操作的预期输出,您可以将 Web 路由添加到应用程序,该应用程序调用控制器函数并将结果返回到 Web 界面。

从以下 EloquentQuery Builder 标签页中进行选择,以查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 将文档插入movies集合

  • 打印新插入的文档

该示例调用 create() 方法插入包含以下字段和值的文档:

  • title 的值 "Marriage Story"

  • year 的值 2019

  • runtime 的值 136

$movie = Movie::create([
'title' => 'Marriage Story',
'year' => 2019,
'runtime' => 136,
]);
echo $movie->toJson();
{
"title": "Marriage Story",
"year": 2019,
"runtime": 136,
"updated_at": "...",
"created_at": "...",
"_id": "..."
}

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 将文档插入movies集合

  • 打印插入操作是否成功

该示例调用 insert() 方法插入包含以下字段和值的文档:

  • title 的值 "Marriage Story"

  • year 的值 2019

  • runtime 的值 136

$success = DB::table('movies')
->insert([
'title' => 'Marriage Story',
'year' => 2019,
'runtime' => 136,
]);
echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes

从以下 EloquentQuery Builder 标签页中进行选择,以查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 将文档插入movies集合

  • 打印插入操作是否成功

该示例调用 insert() 方法插入代表 2023 上映电影的文档。

$success = Movie::insert([
[
'title' => 'Anatomy of a Fall',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')),
],
[
'title' => 'The Boy and the Heron',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')),
],
[
'title' => 'Passages',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')),
],
]);
echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 将文档插入movies集合

  • 打印插入操作是否成功

该示例调用 insert() 方法插入代表 2023 上映电影的文档。

$success = DB::table('movies')
->insert([
[
'title' => 'Anatomy of a Fall',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')),
],
[
'title' => 'The Boy and the Heron',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')),
],
[
'title' => 'Passages',
'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')),
],
]);
echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes

要学习;了解有关Carbon PHP API扩展的更多信息,请参阅Carbon Github存储库。

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