我正在使用MongoDB来保存有关产品的数据。在编写了初始大型数据集(24mio 项)后,我想更改集合中的所有项。
因此,我使用游标遍历整个集合。然后我想为集合中的每个项目添加一个“行”或字段。对于大型数据集,这是行不通的。仅更新了 180000 个项目。在小范围内它正在发挥作用。这是正常的行为吗?
在使用游标遍历整个集合时,MongoDB是否不应该支持写入?
什么是这样做的好习惯呢?
对于较大的集合,您可能会遇到快照问题。当您将数据添加到对象并保存时,它会增长,迫使 mongodb 移动文档。然后您可能会找到该对象两次。
您可以$snapshot
在查询中使用,也可以使用稳定的顺序,例如sort({"_id":1})
. 请注意,您不能同时使用两者。
还要确保至少使用公认的写关注。
当我们遇到类似问题时,我们以 100k(带有一些测试)块的形式获取数据。这是一个快速而简单的解决方案。