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

ome*_*mer 8 mongoose mongodb

AFAIK,这两个操作都可以更新多个文档。如果是这样,两者之间有什么区别?

Mis*_*orp 11

只是在这里引用API 文档

批量写入

在一个命令中向 MongoDB 服务器发送多个 insertOne、updateOne、updateMany、replaceOne、deleteOne 和/或 deleteMany 操作。这比发送多个独立操作(例如,如果您使用 create())要快,因为使用 bulkWrite() 只有一次到 MongoDB 的往返行程。

Mongoose 将对您提供的所有操作执行转换。

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

更新很多

与 update() 相同,除了 MongoDB将更新所有匹配过滤器的文档(而不是仅第一个),而不管 multi 选项的值如何。

注意 updateMany 不会触发更新中间件。使用 pre('updateMany') 和 post('updateMany') 代替。

(强调我的)

要查看使用示例,请查看函数各自文档中提供的示例。

  • 谢谢!尚不清楚 updateMany 是否也需要到服务器的单次往返。 (6认同)