删除文档
概述
本指南介绍了如何使用PyMongo通过执行删除操作从MongoDB集合中删除文档。
删除操作可以从MongoDB集合中删除一个或多个文档。您可以使用delete_one()
或 delete_many()
方法来执行删除操作。
示例数据
本指南中的示例使用来自Atlas示例数据集的sample_restaurants.restaurants
集合。要了解如何创建免费的MongoDB Atlas集群并加载数据集,请参阅PyMongo入门教程。
删除操作
您可以使用以下方法在MongoDB中执行删除操作
delete_one()
,它删除符合搜索条件的第一个文档delete_many()
,它删除所有符合搜索条件的文档
每个删除方法都需要一个查询过滤器文档,该文档指定了确定要删除哪些文档的搜索条件。有关查询过滤器的更多信息,请参阅MongoDB服务器手册中的查询过滤器文档部分。
删除单个文档
以下示例使用delete_one()
方法从restaurants
集合中删除一个名为"Ready Penny Inn"
的文档
query_filter = { "name": "Ready Penny Inn" } result = restaurants.delete_one(query_filter)
删除多个文档
以下示例使用 delete_many()
方法删除 restaurants
集合中所有 borough
值为 "Brooklyn"
的文档。
query_filter = { "borough": "Brooklyn" } result = restaurants.delete_many(query_filter)
自定义删除操作
delete_one()
和 delete_many()
方法可选地接受额外的参数,这些参数代表您可以使用它们来配置删除操作。如果您不指定任何额外的选项,则驱动程序不会自定义删除操作。
属性 | 描述 |
---|---|
collation | 指定在排序结果时要使用的语言排序方式。有关更多信息,请参阅 MongoDB 服务器手册中的 排序。 |
hint | 获取或设置用于扫描文档的索引。有关更多信息,请参阅 MongoDB 服务器手册中的 提示语句。 |
session | ClientSession 的一个实例。 |
let | 参数名称和值的映射。值必须是常数或封闭表达式,不引用文档字段。有关更多信息,请参阅 MongoDB 服务器手册中的 let 语句。 |
comment | 要附加到操作的注释。有关更多信息,请参阅 MongoDB 服务器手册中的 删除命令字段指南。 |
以下代码使用 delete_many()
方法删除 restaurants
集合中所有包含字符串 "Mongo"
的 name
值的文档。它还使用 comment
选项为操作添加注释。
query_filter = { 'name': {'$regex': 'Mongo' }} result = restaurants.delete_many(query_filter, comment="Deleting Mongo restaurants")
提示
如果前面的示例使用的是 delete_one()
方法而不是 delete_many()
,驱动程序将仅删除第一个包含字符串 "Mongo"
的 name
值的文档。
返回值
delete_one()
和 delete_many()
方法返回一个 DeleteResult
类型。该类型包含以下属性
deleted_count
,表示删除的文档数量acknowledged
,表示服务器是否确认结果raw_result
,这是服务器返回的原始结果
注意
如果 acknowledged
属性为 False
,则访问 DeleteResult
的其他所有属性时都会抛出 InvalidOperation
异常。如果服务器没有确认写入操作,则驱动程序无法确定这些值。
如果查询过滤器不匹配任何文档,则驱动程序不删除任何文档,且 deleted_count
为 0。
API 文档
要了解本指南中讨论的任何方法或类型,请参阅以下 API 文档