【发布时间】:2019-01-30 00:33:45
【问题描述】:
以下是参考:
查找单个文档并更新它,返回原始文档或更新后的文档。
更新与过滤器匹配的单个文档。
在我看来,他们俩都是先查询选定的文档,然后再更新它。
我想知道是否存在某种优化差异。唯一的另一个区别是返回值,这让我想知道为什么甚至会使用update_one()。
【问题讨论】:
以下是参考:
查找单个文档并更新它,返回原始文档或更新后的文档。
更新与过滤器匹配的单个文档。
在我看来,他们俩都是先查询选定的文档,然后再更新它。
我想知道是否存在某种优化差异。唯一的另一个区别是返回值,这让我想知道为什么甚至会使用update_one()。
【问题讨论】:
这两个操作之间有一些变化:
find_one_and_update默认情况下 :meth:
find_one_and_update返回原始版本 应用更新之前的文档。返回更新的 代替文档的版本,请使用 return_document 选项。您可以使用 projection 选项限制返回的字段。
upsert 选项可用于创建文档(如果没有) 已经存在了。
如果多个文档匹配filter,则可以应用sort。
因此,此方法执行一种find 操作,允许您对数据库中的记录进行排序和过滤。
update_one使用此方法您无法对记录进行排序,它只是执行find 操作并使用for 循环更新每个找到的元素。
所以最后我认为update_one 操作比find_one_and_update 操作快。
【讨论】: