更新文档
概述
在本指南中,您可以学习如何使用PyMongo通过使用update_one()
或 update_many()
方法。
示例数据
本指南中的示例使用来自Atlas 示例数据集 的 sample_restaurants.restaurants
集合。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅使用 PyMongo 入门 教程。
更新操作
您可以使用以下方法在 MongoDB 中执行更新操作
update_one()
,该函数更新满足搜索条件的第一个文档update_many()
,该函数更新满足搜索条件的所有文档
每个更新方法都需要以下参数
一个 查询过滤器 文档,它确定要更新的文档。有关查询过滤器的更多信息,请参阅 MongoDB 服务器手册中的 查询过滤器文档部分。
一个 更新 文档,它指定了 更新操作符(要执行的类型更新)以及应该更改的字段和值。有关更新操作符及其使用的列表,请参阅 MongoDB 服务器手册中的 字段更新操作符指南页面。
更新一个文档
以下示例使用 update_one()
方法来更新名为 "Bagels N Buns"
的文档在 restaurants
集合中的 name
值。
restaurants = database["restaurants"] query_filter = {'name' : 'Bagels N Buns'} update_operation = { '$set' : { 'name' : '2 Bagels 2 Buns' } } result = restaurants.update_one(query_filter, update_operation)
更新多个文档
以下示例使用 update_many()
方法来更新所有具有 cuisine
值为 "Pizza"
的文档。更新后,文档的 cuisine
值为 "Pasta"
。
restaurants = database["restaurants"] query_filter = {'cuisine' : 'Pizza'} update_operation = { '$set' : { 'cuisine' : 'Pasta' } } result = restaurants.update_many(query_filter, update_operation)
自定义更新操作
update_one()
和 update_many()
方法可以接受可选的额外参数,这些参数表示您可以用来配置更新操作的可选选项。如果您未指定任何额外选项,驱动程序不会自定义更新操作。
属性 | 描述 |
---|---|
upsert | 指定在查询过滤器没有匹配到任何文档时,更新操作是否执行更新插入(upsert)操作。有关更多信息,请参阅MongoDB服务器手册中的更新插入语句。 默认为 False 。 |
bypass_document_validation | 指定更新操作是否跳过文档验证。这允许更新不符合模式验证要求的文档(如果存在)。有关模式验证的更多信息,请参阅MongoDB服务器手册中的模式验证。 默认为 False 。 |
collation | 指定在排序结果时使用的语言排序规则类型。有关更多信息,请参阅MongoDB服务器手册中的排序规则。 |
array_filters | 一个过滤器列表,指定更新应用到哪些数组元素。 |
hint | 获取或设置用于扫描文档的索引。有关更多信息,请参阅MongoDB服务器手册中的提示语句。 |
session | ClientSession 的实例。 |
let | 一个参数名称和值的映射。值必须是常量或封闭表达式,不引用文档字段。有关更多信息,请参阅MongoDB服务器手册中的let语句。 |
comment | 附加到操作的注释。有关更多信息,请参阅MongoDB服务器手册中的插入命令字段指南。 |
以下代码使用update_many()
方法查找所有borough
字段值为"Manhattan"
的文档。然后它将这些文档中的borough
值更新为"Manhattan (north)"
。因为upsert
选项设置为True
,如果查询过滤器没有匹配任何现有文档,PyMongo将插入一个新的文档。
restaurants = database["restaurants"] query_filter = {'borough' : 'Manhattan'} update_operation = { '$set' : { 'borough' : 'Manhattan (north)' } } result = restaurants.update_many(query_filter, update_operation, upsert = True)
返回值
update_one()
和update_many()
方法各自返回一个UpdateResult
对象。该UpdateResult
类型包含以下属性
属性 | 描述 |
---|---|
matched_count | 匹配查询过滤器的文档数量,无论更新了多少。 |
modified_count | 由更新操作修改的文档数量。如果一个更新的文档与原始文档相同,则不包括在此计数中。 |
raw_result | 服务器返回的原始结果文档。 |
upserted_id | 如果驱动程序执行了更新插入操作,则在数据库中插入的文档的ID。否则为 None 。 |
附加信息
要了解更多关于创建查询过滤器,请参阅指定查询指南。
API 文档
要了解更多关于本指南中讨论的任何方法或类型,请参阅以下API文档