猫鼬:findOneAndUpdate〜500k文档

时间:2019-03-05 08:46:58

标签: javascript node.js mongodb mongoose

由于我想用500k条目更新整个文档集合(有些可能存在,有些不存在),我遍历文档(它们是来自CSV的普通JS对象),并通过{{ 1}}方法。

这是一个简化的JS代码:

findOneAndUpdate

第一次插入的速度很快(每秒超过500次),但是当达到25%时,它开始确实很慢(500次输入10秒或更长时间)。我认为接近80%会比较慢(冻结?)。

是否有更好的方法来做这种事情?我该如何加快速度?

我的意思是,它只有50万个整体(具有很多属性,但是我认为这并不重要)。

3 个答案:

答案 0 :(得分:2)

有2种方法可以使我更有效地做到这一点。

  1. 确保您在REF上有索引。

  2. 创建批处理更新,而不是等待1 bulkWrite

答案 1 :(得分:2)

发表评论作为答案

您有an index on REF吗?否则,数据库将不得不扫描整个集合以找出是否存在具有相同REF的模型。

答案 2 :(得分:1)

我曾经为数据库模型迁移做过这类操作,但发现produce在这里确实有所作为。我将执行以下操作:

.bulkWrite()

在您的情况下,在每次迭代中,您都在等待来查询和更新文档。批量写入旨在避免这种情况,并让DB在后台进行艰苦的工作。

如果您想进一步了解该主题,请查看MongoDB docs,在这里它告诉您有关批量大小和操作顺序的信息。

希望这可以帮助您解决问题