首页 > 解决方案 > Microsoft.Azure.Cosmos SDK 带有延续令牌的分页查询

问题描述

我正在从 Microsoft.Azure.Documents SDK 迁移到新的 Microsoft.Azure.Cosmos (v3.2.0),并且在获取分页查询的延续令牌时遇到问题。在之前的 SDK 中,当您拥有 FeedResponse 对象时,它会返回 HasMoreResults 的布尔值以及如果用户想要调用下一页(通过 API 端点),我会将其传递给我的用户。在新的 SDK 中,我试图在我的容器上使用 GetItemQueryIterator 方法,我看到的唯一示例是使用 while 循环来使用 HasMoreResults 值获取所有页面,而我无法提取 ContinuationToken 并只传回第一个结果集。

到目前为止,我的代码如下所示:

var feedIterator = _documentContext.Container.GetItemQueryIterator<MyDocumentModel>(query, request.ContinuationToken, options);

if (feedIterator.HasMoreResults)
{
    listViewModel.HasMoreResults = true;
    //listViewModel.ContinuationToken = feedIterator.ContinuationToken; (DOES NOT EXIST!)
}

注释掉的行是我通常希望从中提取 ContinuationToken 但它不存在的地方。

大多数示例显示使用迭代器,如下所示:

while (feedIterator.HasMoreResults)
{
    listViewModel.MyModels.AddRange(_mapper.Map<List<MyModelListViewItem>>(await results.ReadNextAsync()));
}

但是如果我想获取下一页,我只想返回一页结果并传递一个继续令牌。

标签: azureazure-cosmosdbazure-cosmosdb-sqlapi

解决方案


ContinuationToken 是 ReadNextAsync 响应的一部分:

FeedResponse<MyDocumentModel> response = await feedIterator.ReadNextAsync();
var continuation = response.ContinuationToken;

原因是 ReadNextAsync 是进行服务调用的时刻,代表一页数据,而延续是针对该特定页面的。


推荐阅读