具有连续令牌的Microsoft.Azure.Cosmos SDK分页查询

时间:2019-09-26 01:10:52

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi

我正在从Microsoft.Azure.Documents SDK迁移到新的Microsoft.Azure.Cosmos(v3.2.0),并且在获取分页查询的续用令牌时遇到了问题。在先前的SDK中,当您具有FeedResponse对象时,它为HasMoreResults和ContinuationToken返回了布尔值,如果他们想调用下一页(通过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()));
}

但是我只想返回一页结果,如果要获得下一页,则传递一个延续标记。

2 个答案:

答案 0 :(得分:1)

我还没有尝试过代码,但是仔细阅读了文档,FeedIterator上的ReadNextAsync()方法返回了类型为FeedResponse的对象,该对象具有ContinuationToken属性。 / p>

答案 1 :(得分:1)

ContinuationToken是ReadNextAsync响应的一部分:

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

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