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

Delete Documents

在本指南中,您可以学习;了解如何使用MongoDB PHP库通过执行删除操作从MongoDB集合中删除文档。

删除操作可从 MongoDB 集合中删除一个或多个文档。 您可以使用MongoDB\Collection::deleteOne()MongoDB\Collection::deleteMany()方法执行删除操作。

本指南中的示例使用Atlas示例数据集sample_restaurants数据库中的restaurants集合。 要从PHP应用程序访问权限此集合,请实例化一个连接到Atlas 集群的MongoDB\Client ,并将以下值分配给$collection变量:

$collection = $client->sample_restaurants->restaurants;

要学习如何创建免费的MongoDB 部署并加载示例数据集,请参阅MongoDB 入门指南

您可以通过以下方法执行删除操作:

  • MongoDB\Collection::deleteOne(),这会删除与 Atlas Search条件匹配的 第一个文档

  • MongoDB\Collection::deleteMany(),这会删除与 Atlas Search条件匹配的 所有文档

每个删除方法都需要一个查询过滤文档,它指定搜索条件以确定选择要删除的文档。 有关查询筛选器的更多信息,请参阅MongoDB Server手册中的查询筛选器文档部分

以下示例使用deleteOne()方法删除restaurants集合中name值为'Ready Penny Inn'的文档:

$collection->deleteOne(['name' => 'Ready Penny Inn']);

以下示例使用deleteMany()方法删除restaurants集合中borough值为'Brooklyn'的所有文档:

$collection->deleteMany(['borough' => 'Brooklyn']);

您可以通过将指定选项值的大量作为参数传递来修改MongoDB\Collection::deleteOne()MongoDB\Collection::deleteMany()方法的行为。 下表描述了可在大量中设立的选项:

选项
说明

collation

指定比较字符串时使用的语言排序规则类型。要了解更多信息,请参阅本页面的 排序规则 部分。

writeConcern

设置操作的写关注(write concern)。 此选项默认为集合的写关注(write concern)。 有关更多信息,请参阅MongoDB Server手册中的写关注。

hint

获取或设置用于扫描文档的索引。 有关更多信息,请参阅 MongoDB Server 手册中的提示语句

let

指定包含值列表的文档,以提高操作的可读性。 值必须是常量或不引用文档字段的闭合表达式。 有关更多信息,请参阅MongoDB Server手册中的 let声明。

session

指定与操作关联的客户端会话。 有关更多信息,请参阅MongoDB Server手册中的会话。

comment

为操作附加注释。 有关更多信息,请参阅MongoDB Server手册中的删除命令字段指南。

要为操作指定排序规则,请传递 $options大量参数,该参数将 collation 选项设置为操作方法。将 collation 选项分配给配置排序规则规则的大量。

下表描述了可以设立以配置排序规则的字段:

字段
说明

locale

(必选) 指定国际单字符组件 (ICU) 区域设置。有关支持的区域设置列表,请参阅 MongoDB Server 手册中的排序规则区域设置和默认参数

数据类型: string

caseLevel

(可选)指定是否包含大小写比较。

当设置为true 时,比较行为取决于strength 字段的值:

- 如果strength 为 ,则1 PHP
库比较基本字符和大小写。

- 如果strength2 ,则 PHP
库比较基本字符、变音符、其他从节点差异和大小写。

- 如果strength 为任何其他值,则忽略此字段。

当设置为 false 时,PHP 库不包含强度级别 12 的大小写比较。

数据类型bool
默认值false

caseFirst

(可选)指定三级比较期间大小写差异的排序顺序。

数据类型string
默认"off"

strength

(可选) 指定要执行的比较级别,如 ICU 文档 中所定义。

数据类型int
默认3

numericOrdering

(可选)指定驱动程序是将数字字符串作为数字还是字符串进行比较。

如果设置为 true,PHP 库将数字字符串作为数字进行比较。示例:在比较字符串 "10" 和 "2" 时,该库使用字符串的数字值,并将 "10" 视为大于 "2"。

如果设置为 false,PHP 库将数字字符串作为字符串进行比较。示例,在比较字符串 "10" 和 "2" 时,该库会一次比较一个字符,并将 "10" 视为小于 "2"。

有关更多信息,请参阅MongoDB Server手册中的排序规则限制

数据类型bool
默认false

alternate

(可选)指定库是否将空格和标点视为基本字符以进行比较。

数据类型string
默认"non-ignorable"

maxVariable

(可选)指定当 alternate 字段设置为 "shifted" 时,库认为可忽略的字符。

数据类型string
默认值"punct"

backwards

(可选)指定包含变音符号的字符串是否从字符串的后部到前部排序。

数据类型bool
默认false

要学习;了解有关排序规则和每个字段可能值的更多信息,请参阅MongoDB Server手册中的排序规则条目。

以下示例调用 deleteMany() 方法删除restaurants集合中 name 值包含string 'Mongo' 的所有文档。 它还在大量参数中设置comment选项,以便为操作添加注释:

$collection->deleteMany(
['name' => new MongoDB\BSON\Regex('Mongo')],
['comment' => 'Deleting Mongo restaurants'],
);

注意

如果将上示例中的deleteMany()方法替换为deleteOne() ,则该库仅删除name值包含'Mongo'的第一个文档。

MongoDB\Collection::deleteOne()MongoDB\Collection::deleteMany()方法返回MongoDB\DeleteResult对象。 该类包含以下成员函数:

  • isAcknowledged(),它返回一个布尔值,表示操作是否已确认。

  • getDeletedCount(),返回已删除的文档数。 如果写入操作未得到确认,则此方法会引发错误。

如果查询筛选条件不匹配任何文档,则驱动程序不会删除任何文档,并且 getDeletedCount() 会返回 0

以下示例调用deleteMany()方法来删除除cuisine值为'Greek'的文档。 然后,它调用getDeletedCount()成员函数来打印已删除文档的数量:

$result = $collection->deleteMany(['cuisine' => 'Greek']);
echo 'Deleted documents: ', $result->getDeletedCount(), PHP_EOL;
Deleted documents: 111

要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: