以下是以下内容的参考:
查找并更新单个文档,返回原始文档或更新后的文档。
更新与过滤器匹配的单个文档。
在我看来,他们俩都首先查询所选文档,然后对其进行更新。
我想知道是否存在某种优化差异。唯一的不同之处在于返回值,这使我想知道为什么一个人甚至根本不使用update_one()
。
答案 0 :(得分:2)
这两个操作之间有一些变化:
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
操作更快。