文档菜单

文档首页开发应用程序Python 驱动程序PyMongo

更新文档

本页内容

  • 概述
  • 示例数据
  • 更新操作
  • 更新单个文档
  • 更新多个文档
  • 自定义更新操作
  • 返回值
  • 更多信息
  • API 文档

在本指南中,您可以学习如何使用 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文档

← 插入文档