Mongoose中findOneAndUpdate和update的区别

54

findOneAndUpdate和update有什么区别?

两者都接受查询条件和要更新的文档。

3个回答

86

这里有相关文档供查看,分别是.update().findAndModify(),而.findOneAndUpdate()则是其根方法。

主要的区别在于:

  • update():旨在对集合中与其查询条件匹配的一个或多个文档执行原子更新操作。它在其响应中返回修改后的文档数量。

  • findOneAndUpdate():旨在同时处理更新语句以及检索“单个”文档的内容。返回的状态取决于传递给操作的“new”选项的值。当选项为true时,将返回“修改后”的文档。当选项为false时,在任何修改之前都会返回“原始”文档。后一种形式是默认选项。

简而言之,一个用于批量修改而不关心结果中的文档内容,而另一个用于修改一个单独的文档并返回结果中的文档内容。

这就是它们的区别。


12
问题应该更一致,如下所示:mongoDB的'findOneAndUpdate'和'updateOne'有什么区别?或者mongoDB的'update'和'findAndModify'有什么区别?性能方面呢? - Carlos Araya
另一个不同之处在于:使用Mongoose中间件(钩子)时,updateOne触发文档中间件,而findOneAndUpdate触发查询中间件。两者在编写钩子时可以访问的数据不同(前者是文档,后者是查询)。 - GusSL

6

.findOneAndUpdate 方法会发出一个mongodb .findAndModify 更新命令,并将找到的文档(如果有)返回给回调函数,如果 new 选项为 true ,则返回修改后的文档而不是原始文档,同时使用.update方法执行查询作为一个update()操作。


2

请注意,在findOneAndXXX方法中有一个选项returnNewDocument,默认值为true。如果您正在使用node.js驱动程序,则该选项称为returnOriginal


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接