azure - 使用连续 token 的 Microsoft.Azure.Cosmos SDK 分页查询

标签 azure azure-cosmosdb azure-cosmosdb-sqlapi

我正在从 Microsoft.Azure.Documents SDK 迁移到新的 Microsoft.Azure.Cosmos (v3.2.0),但在获取分页查询的继续 token 时遇到问题。在以前的 SDK 中,当您拥有 FeedResponse 对象时,它会返回 HasMoreResults 的 bool 值以及 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()));
}

但我只想返回单页结果,如果我想获取下一页,则传递一个继续 token 。

最佳答案

ContinuationToken 是 ReadNextAsync 响应的一部分:

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

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

关于azure - 使用连续 token 的 Microsoft.Azure.Cosmos SDK 分页查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108291/

相关文章:

c# - 如何将具有动态值的 javascript 对象发布到 mvc6 Controller 操作

azure - 如何在 Cosmos DB 中查找重复文档

c# - cosmos GetItemLinqQueryable 与 ItemResponse 不带partitionKey

azure - 致力于自动化以批准来自逻辑应用程序流的拉取请求

azure - 从 IoT Hub(microsoft azure) 获取数据有哪些不同方法?

javascript - 如何在版本 ^3 上使用 gremlin 启动与 Cosmos DB 图形数据库的新连接

mysql - 用于在 Azure CosmosDB 集合中查询的分页运算符

c# - 如何从具有当前纬度和经度的 cosmos db 查找最近的优惠券

c# - 反序列化 blob 并输出到具有 blob 内容名称的不同容器

Azure Devops - 如何强制在新分支上触发 CI,或使用发布分支?