azure - 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()));
}
但是如果我想获取下一页,我只想返回一页结果并传递一个继续令牌。
解决方案
ContinuationToken 是 ReadNextAsync 响应的一部分:
FeedResponse<MyDocumentModel> response = await feedIterator.ReadNextAsync();
var continuation = response.ContinuationToken;
原因是 ReadNextAsync 是进行服务调用的时刻,代表一页数据,而延续是针对该特定页面的。
推荐阅读
- javascript - 如何有条件地禁用 kendogrid 中的 selectlistitem
- python - Python 图形搜索库
- html - 使用 html 标记不显示图像
- netsuite - SuiteScript 2.0 检索特定自定义记录的角色权限级别
- javascript - 使用具有多个条件的内部联接
- node.js - 给定多个可下载链接,如何在节点中创建 zip 文件
- c++ - 在模板类的构造函数末尾调用的模板的析构函数
- python - 熊猫到二分图
- ios - 在我的 IOS 项目中,当我尝试删除桥接头文件时会导致错误?
- react-native - 有没有办法在 react-native-paper SearchBar 中获取键盘搜索/返回输入?