删除文档
概述
在此指南中,您可以了解如何使用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 文档