文档首页 → 开发应用程序 → Python 驱动程序 → PyMongo
更新文档
概述
在本指南中,您可以学习如何使用 PyMongo 通过使用update_one()
或 update_many()
方法来更新 MongoDB 集合中的文档。
示例数据
本指南中的示例使用来自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 | 指定更新操作是否在查询过滤器没有匹配到任何文档时执行更新操作。有关更多信息,请参阅MongoDB服务器手册中的upsert语句。 默认值为 False |
bypass_document_validation | 指定更新操作是否跳过文档验证。这允许您更新不符合模式验证要求的文档(如果存在)。有关模式验证的更多信息,请参阅MongoDB服务器手册中的模式验证。 默认值为 False 。 |
collation | 指定排序结果时使用的语言排序规则类型。有关更多信息,请参阅MongoDB服务器手册中的排序规则。 |
array_filters | 一个过滤器列表,指定更新操作应用于哪些数组元素。 |
hint | 获取或设置用于扫描文档的索引。有关更多信息,请参阅MongoDB服务器手册中的hint语句。 |
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 | 如果驱动程序执行了upsert操作,则在数据库中upsert的文档的ID。否则为 None 。 |
附加信息
要了解有关创建查询过滤器的更多信息,请参阅指定查询指南。
API 文档
要了解有关本指南中讨论的任何方法或类型的更多信息,请参阅以下API文档