mongoose中的updateMany()和bulkWrite()有什么区别?

14

据我所知,这两个操作都可以更新多个文档。那么,它们之间有什么区别?

1个回答

19

这里引用了 API 文档

bulkWrite

将多个 insertOne、updateOne、updateMany、replaceOne、deleteOne 和/或 deleteMany 操作一次性发送到 MongoDB 服务器 以执行。与独立地发送多个操作(例如使用 create())相比,这样做更快,因为使用 bulkWrite() 只需要与 MongoDB 进行一次往返。

Mongoose 将对您提供的所有操作进行类型强制转换。

此函数不会触发任何中间件,包括 save() 和 update()。如果您需要针对每个文档触发 save() 中间件,请改用 create()。

updateMany

与 update() 相同,但 MongoDB 将更新与 filter 匹配的所有文档(而不仅仅是第一个),无论 multi 选项的值如何。

请注意,updateMany 不会触发 update 中间件。请改用 pre('updateMany') 和 post('updateMany')。

(强调是我的)

请参阅相应文档中提供的使用示例。


9
谢谢!目前还不清楚 updateMany 是否也需要单次请求到服务器。 - omer
@omer UpdateMany 只需要一次往返就能完成工作。在 BulkWrite 中,您可以同时执行其他 CRUD 操作,而在 UpdateMany 中,您只能执行更新操作。 - Richa Bhuwania

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