对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
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

(必需)指定 Unicode(ICU)区域设置设置的国际组件。有关支持的区域设置列表,请参阅MongoDB Server手册中的排序规则区域设置和默认参数。数据类型:

string

caseLevel

(可选)指定是否包括大小写比较。当设立为

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

strength1


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

— 如果 为 ,则PHP库会比较基本字符、变音符号、其他从节点(secondary nodestrength

falsefrom replica set)差异和大小写。 — 如果 为任何其他值,则忽略此字段。当设立为 时, PHP库不包括强度级别12

的大小写比较。数据类型:bool
默认值:false

caseFirst

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

string
默认值:"off"

strength

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

int
默认值:3

numericOrdering

(可选)指定驾驶员是否将数字字符串作为数字进行比较。如果设立为

true,则PHP库将数字字符串作为数字进行比较。示例,在比较字符串“”和“”时,该库使用字符串的数值并将“”视为大于“”。如果设立为10 2102

false102102

,则PHP库将数字字符串作为字符串进行比较。示例,在比较字符串“”和“”时,该库一次比较一个字符,并将“”视为小于“”。有关更多信息,请参阅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 文档: