删除文档
概述
在此指南中,您可以了解如何使用MongoDB PHP库通过执行删除操作从MongoDB集合中删除文档。
删除操作从MongoDB集合中删除一个或多个文档。您可以使用以下方法执行删除操作:MongoDB\Collection::deleteOne() 或 MongoDB\Collection::deleteMany() 方法。
示例数据
本指南中的示例使用来自 sample_restaurants 数据库的 restaurants 集合。Atlas 示例数据集。要从您的 PHP 应用程序访问此集合,请创建一个连接到 Atlas 集群的 MongoDB\Client 实例,并将以下值分配给您的 $collection 变量
$collection = $client->sample_restaurants->restaurants;
要了解如何创建免费的 MongoDB Atlas 集群并加载数据集,请参阅 Atlas 入门指南。
删除操作
您可以通过以下方法执行删除操作
MongoDB\Collection::deleteOne(),它删除匹配搜索条件的第一个文档MongoDB\Collection::deleteMany(),它删除所有匹配搜索条件的文档
每个删除方法都需要一个 查询过滤器 文档,该文档指定搜索条件以确定要删除哪些文档。有关查询过滤器的更多信息,请参阅 MongoDB 服务器手册中的 查询过滤器文档部分。
删除一个文档
以下示例使用 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 | 指定比较字符串时使用的语言排序规则类型。有关更多信息,请参阅 MongoDB 服务器手册中的 排序规则。 |
writeConcern | 设置操作的写入关注点。此选项默认为集合的写入关注点。有关更多信息,请参阅 MongoDB 服务器手册中的 写入关注点。 |
hint | 获取或设置用于扫描文档的索引。有关更多信息,请参阅MongoDB服务器手册中的提示语句。 |
let | 指定一个包含值列表的文档以提高操作的可读性。值必须是常量或闭包表达式,不能引用文档字段。有关更多信息,请参阅MongoDB服务器手册中的let语句。 |
session | 指定要与此操作关联的客户端会话。有关更多信息,请参阅MongoDB服务器手册中的会话。 |
comment | 将注释附加到操作上。有关更多信息,请参阅MongoDB服务器手册中的删除命令字段指南。 |
示例
以下示例调用deleteMany()方法来删除包含字符串'Mongo'的name值的restaurants集合中的所有文档。它还设置数组参数中的comment选项,以将注释添加到操作中。
$collection->deleteMany( ['name' => new MongoDB\BSON\Regex('Mongo')], ['comment' => 'Deleting Mongo restaurants'], );
注意
如果将前面的示例中的deleteMany()方法替换为deleteOne(),库将只删除第一个包含字符串'Mongo'的name值的文档。
返回值
MongoDB\Collection::deleteOne()和MongoDB\Collection::deleteMany()方法返回一个MongoDB\DeleteResult对象。该类包含以下成员函数
isAcknowledged(),返回一个布尔值,指示操作是否被确认。getDeletedCount(),返回被删除的文档数量。如果写操作未被确认,则此方法抛出错误。
如果查询过滤器不匹配任何文档,驱动程序不会删除任何文档,并且 getDeletedCount() 返回 0。
示例
以下示例调用 deleteMany() 方法删除具有 'Greek' 的 cuisine 值的文档。然后它调用 getDeletedCount() 成员函数来打印删除的文档数量
$result = $collection->deleteMany(['cuisine' => 'Greek']); echo 'Deleted documents: ', $result->getDeletedCount(), PHP_EOL;
Deleted documents: 111
API 文档
要了解更多关于本指南中讨论的任何方法或类型的信息,请参阅以下 API 文档