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

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

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

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

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

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