问题描述
我有一个约有800,000个文档的馆藏,我想一次取5,000个文档。
运行以下代码时:
const CHUNK_SIZE = 5000;
let skip = 0;
do {
matches = await dbClient
.collection(collectionName)
.find({})
.skip(skip)
.limit(CHUNK_SIZE)
.toArray();
// ... some processing
skip += CHUNK_SIZE;
} while (matches.length)
大约30次迭代后,我开始获取上次迭代中已经收到的文档。
我在这里想念什么?
解决方法
如评论中所述,您必须在查询上应用.sort()
。
要在不增加过多性能开销的情况下这样做,最简单的方法是在_id
上进行此操作,例如
.sort(
{
"_id" : 1.0
}
)
MongoDB或AmazonDocumentDB风味都不能保证没有它的隐式结果排序顺序。