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

Delete Documents

在本指南中,您可以学习;了解如何使用 Laravel 集成从MongoDB集合中删除文档。使用删除操作从MongoDB 数据库中删除数据。

本部分举例说明了以下删除操作:

本指南中的操作引用了以下 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 文档中的属性转换。

您可以通过以下方式删除一个文档:

  • 对模型的实例调用$model->delete()方法。

  • 通过调用delete()方法来检索和删除模型实例的链式方法。

  • 对模型调用 Model::destroy($id) 方法,向其传递要删除的文档的 _id 值。

以下示例展示了如何通过对该模型的实例调用$model->delete()来删除文档:

$concert = Concert::first();
$concert->delete();

delete()方法成功时,该操作将返回已删除的文档数。

如果调用的检索部分与集合中的任何文档都不匹配,则该操作将返回0

以下示例展示了如何链式调用以检索第一个匹配文档并将其删除:

Concert::where('venue', 'Carnegie Hall')
->limit(1)
->delete();

注意

orderBy()调用按_id字段对结果进行排序,以保证排序顺序的一致性。 要了解有关MongoDB 排序的更多信息,请参阅 MongoDB Server手册中的 自然顺序 词汇表条目。

delete()方法成功时,它会返回已删除的文档数。

如果where()方法未匹配任何文档, delete()方法将返回0

以下示例演示如何通过将 _id 值传递给 Model::destroy($id) 方法来删除文档:

$id = 'MSG-0212252000';
Concert::destroy($id);

destroy()方法成功时,它会返回已删除的文档数。

如果 _id 值与任何文档都不匹配,destroy() 方法将返回 0

您可以通过以下方式删除多个文档:

  • 调用Model::destroy($ids)方法,传递要删除的文档或模型实例的 ID 列表。

  • 链式方法以检索引用多个对象的 Laravel 集合对象,并通过调用delete()方法删除它们。

以下示例展示了如何通过将由 $ids 表示的 _id 值大量传递给 destroy() 方法来删除文档:

$ids = [3, 5, 7, 9];
Concert::destroy($ids);

提示

传递大型列表时, destroy()方法性能会受到影响。 为了获得更好的性能,请改用Model::whereIn('id', $ids)->delete()

destroy()方法成功时,它会返回已删除的文档数。

如果 _id 值与任何文档都不匹配,destroy() 方法将返回 0

以下示例展示了如何链式调用以检索匹配的文档并将其删除:

Concert::where('ticketsSold', '>', 7500)
->delete();

delete()方法成功时,它会返回已删除的文档数。

如果where()方法未匹配任何文档, delete()方法将返回0

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

提示

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

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

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

此示例将执行以下动作:

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

  • movies集合中删除与查询筛选器匹配的文档

  • 打印已删除文档的数量

该示例在Movie模型上调用以下方法:

  • where():匹配 title字段值为 "Quiz Show" 的文档

  • limit():仅检索第一个匹配的文档

  • delete():删除检索到的文档

$deleted = Movie::where('title', 'Quiz Show')
->limit(1)
->delete();
echo 'Deleted documents: ' . $deleted;
Deleted documents: 1

此示例将执行以下动作:

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

  • movies集合中删除与查询筛选器匹配的文档

  • 打印已删除文档的数量

该示例调用以下查询构建器方法:

  • where():匹配 title字段值为 "Quiz Show" 的文档

  • limit():仅检索第一个匹配的文档

  • delete():删除检索到的文档

$deleted = DB::table('movies')
->where('title', 'Quiz Show')
->limit(1)
->delete();
echo 'Deleted documents: ' . $deleted;
Deleted documents: 1

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

此示例将执行以下动作:

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

  • movies集合中删除与查询筛选器匹配的文档

  • 打印已删除文档的数量

该示例在Movie模型上调用以下方法:

  • where():匹配 year字段的值小于或等于 1910 的文档

  • delete():删除匹配的文档并返回成功删除的文档数

$deleted = Movie::where('year', '<=', 1910)
->delete();
echo 'Deleted documents: ' . $deleted;
Deleted documents: 7

此示例将执行以下动作:

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

  • movies集合中删除与查询筛选器匹配的文档

  • 打印已删除文档的数量

该示例调用以下查询构建器方法:

  • where():匹配 year字段的值小于或等于 1910 的文档

  • delete():删除匹配的文档并返回成功删除的文档数

$deleted = DB::table('movies')
->where('year', '<=', 1910)
->delete();
echo 'Deleted documents: ' . $deleted;
Deleted documents: 7

要学习;了解Laravel 集成中提供的修改删除行为的 Laravel 功能,请参阅以下部分:

  • 软删除,允许您将文档标记为已删除,而不是从数据库中删除

  • 修剪,允许您定义自动删除文档的条件

要学习;了解如何将文档插入MongoDB集合,请参阅插入文档指南。