findOneAndUpdate和update有什么区别?
两者都接受查询条件和要更新的文档。
findOneAndUpdate和update有什么区别?
两者都接受查询条件和要更新的文档。
这里有相关文档供查看,分别是.update()
和.findAndModify()
,而.findOneAndUpdate()
则是其根方法。
主要的区别在于:
update():旨在对集合中与其查询条件匹配的一个或多个文档执行原子更新操作。它在其响应中返回修改后的文档数量。
findOneAndUpdate():旨在同时处理更新语句以及检索“单个”文档的内容。返回的状态取决于传递给操作的“new”选项的值。当选项为true
时,将返回“修改后”的文档。当选项为false
时,在任何修改之前都会返回“原始”文档。后一种形式是默认选项。
简而言之,一个用于批量修改而不关心结果中的文档内容,而另一个用于修改一个单独的文档并返回结果中的文档内容。
这就是它们的区别。
.findOneAndUpdate
方法会发出一个mongodb .findAndModify
更新命令,并将找到的文档(如果有)返回给回调函数,如果 new
选项为 true
,则返回修改后的文档而不是原始文档,同时使用.update
方法执行查询作为一个update()
操作。
请注意,在findOneAndXXX方法中有一个选项returnNewDocument
,默认值为true
。如果您正在使用node.js驱动程序,则该选项称为returnOriginal
。
updateOne
触发文档中间件,而findOneAndUpdate
触发查询中间件。两者在编写钩子时可以访问的数据不同(前者是文档,后者是查询)。 - GusSL