我的 mongodb 中有一个集合,其中包含大约 10 个 Mio 文档。我想遍历所有这些来更改某些字段。一次获取所有数据会使程序崩溃,因为数据太多,并使用如下所示的限制
MyModel.find({/* condition... */}).limit(500).exec()
是有问题的,因为我的修改没有改变条件,所以每次都会返回相同的文档。
任何人都可以给我提示如何逐步遍历/修改整个集合吗?
最佳答案
凯文概述了两个有效的选项。
另一种选择是本质上分页。如果您按 _id
排序并继续查询更大的 _id
,您可以保持完全相同的逻辑。像这样的东西:
var lastId = new ObjectId();
MyModel.find({/* condition... */, _id: {$gt: lastId}}).sort({_id:
1}).limit(500).exec(function(err, records){
// Your logic
lastId = records[records.length - 1]._id;
})
您只需将该函数包装在某种异步 while
循环中,并确保在未收到 500 条记录时退出。
关于javascript - NodeJS - 使用 mongoose 解析大型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598977/