在查询DocumentDB时使用跳过和限制获取上一页的结果

问题描述

我有一个约有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风味都不能保证没有它的隐式结果排序顺序。

Amazon DocumentDB

Mongo Result Ordering