文档菜单
文档首页
/ / /
PHP库手册
/

删除文档

在本页

  • 概述
  • 示例数据
  • 删除操作
  • 删除单个文档
  • 删除多个文档
  • 修改删除操作
  • 示例
  • 返回值
  • 示例
  • API文档

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

  • MongoDB\Collection::deleteOne()

  • MongoDB\Collection::deleteMany()

  • MongoDB\DeleteResult

返回

插入