文档菜单
文档首页
/ / /
PyMongo
/

更新文档

本页内容

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

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

返回

插入