c# - Cosmos DB 在延续令牌中返回意外值“过滤器”
问题描述
我有以下 json 对象:
{
"id": "9df7d70e-1b07-4080-ac9e-964332c93a89",
"name": "some name",
"ranking": {
"A": 1,
"B": 2,
}
}
我想使用pagination根据键A或B对项目进行排序。
我为此使用的查询:
SELECT * FROM c WHERE ... ORDER BY c.ranking['A'] ASC
分页参数:
FeedOptions feedOptions = new FeedOptions()
{
MaxItemCount = cosmosDbSettings.PageResultsCount,
RequestContinuation = continuationToken,
EnableCrossPartitionQuery = true
};
触发 cosmos db:
var docQuery = documentClient.CreateDocumentQuery<dynamic>(
UriFactory.CreateDocumentCollectionUri(cosmosDbSettings.DatabaseId, collectionId),
new SqlQuerySpec(query, sqlParameters),
feedOptions)
.AsDocumentQuery();
var results = new PagedResources();
List<dynamic> resources = new List<dynamic>();
var queryResult = await docQuery.ExecuteNextAsync();
while (queryResult.Count == 0 && docQuery.HasMoreResults)
{
queryResult = await docQuery.ExecuteNextAsync();
}
if (!queryResult.Any())
{
return results;
}
对于第一页和第二页,它工作正常,然后突然缺少一些项目作为响应。
在令牌过滤器的末尾出现
filter":"c.ranking[\"A\"] >= 2"
整个令牌:
[{"compositeToken":{"token":"+RID:~oClCAPq5X0KLAAAAAAAAAA==#RT:2#TRC:20#RTD:GQD5+RFVofBwed+BlCvhBMAU#ISV:2#IEO:65551#FPC:AgEAAAAcAHMAwP1gHxAAUgB4ABgAEQAAGDaA4wAcAABgwkM=","range":{"min":"","max":"05C1DFFFFFFFFC"}},"orderByItems":[{"item":5}],"rid":"oClCAPq5X0KMAAAAAAAAAA==","skipCount":0,"filter":"c.ranking[\"A\"] >= 2"}]
也许我错过了一些东西,任何帮助将不胜感激!
解决方案
请确保您排空所有查询结果(来源):
while (docQuery.HasMoreResults)
{
var queryResult = await docQuery.ExecuteNextAsync();
resources.AddRange(queryResult);
}
return resources;
此外,延续令牌的内容是不透明的,它包含的任何内容都是为了让查询引擎在您下次想要恢复时使用。如果您耗尽所有结果(如我所示),它将是null
.
推荐阅读
- python - 如何从常数中减去 Keras 输入?
- python - Python - 魔杖不会转换所有页面?
- html - 如何在 HTML 中通过 Hover over 扩展图像?
- api - 如何在 NuxtJS 的每个页面上显示来自 API 的相同内容?
- karate - 如何在空手道中将多个输入传递给 GET 请求
- javascript - 处理动态生成的 TextInput 的状态:React Native
- microsoft-teams - 需要了解 Microsoft Teams 集成以构建一些 AI 功能
- java - 表“users”上的更新或删除违反了表“movie_list”上的外键约束“fk_owner_id”
- c - 单个语句中多个大于/小于操作的效率
- python - kmeans 的肘部方法