Azure CosmosDB REST API 忽略数据资源管理器 returns 的结果
Azure CosmosDB REST API omits results that data explorer returns
我有一个相当大的 cosmos 数据库 collection(大约 150 万条记录)。如果我 运行 在 数据浏览器 中对索引字段进行查询,例如:
SELECT * FROM c WHERE ARRAY_CONTAINS(c.InnerArray, { "MyValue": 1234 }, true)
我收到了预期的结果。
如果我对 REST API 执行相同的查询,我收到:
{
"_rid": "...",
"Documents": [],
"_count": 0
}
这种差异因人而异。对于某些文档,我在门户数据资源管理器中收到它,对于其他文档,REST API 仅在数据资源管理器中收到。
我已经缩小了一个差异,但我不确定 'fix' 是什么(假设这是问题所在)。
如果我从门户导出 'Per-partition query metrics (CSV)',我可以看到在 REST api 上 return 的文档位于 'partition key range id' 0. 那些没有出现在 REST api 上(但出现在门户中)的在 'partition key range id' 1.
我需要在 REST api 上设置一些额外的配置或 header 吗?我设置了包含 x-ms-documentdb-query-enablecrosspartition
的请求 header 并在响应中接收到空的延续令牌。
补充说明:
C# SDK(网关和直接)连接模式将 return REST API 不会的文件。
使用 REST API 执行查询时,请确保您正在使用和验证 x-ms-continuation
header。参考:https://docs.microsoft.com/rest/api/cosmos-db/common-cosmosdb-rest-response-headers
您可以重复(发送更多请求)直到响应中不返回继续令牌。
SDK 会有这种行为,这就是您看到这种差异的原因。它类似于迭代检查 HasMoreResults
或 FeedResponse
.
中的 ContinuationToken
属性的查询
我有一个相当大的 cosmos 数据库 collection(大约 150 万条记录)。如果我 运行 在 数据浏览器 中对索引字段进行查询,例如:
SELECT * FROM c WHERE ARRAY_CONTAINS(c.InnerArray, { "MyValue": 1234 }, true)
我收到了预期的结果。
如果我对 REST API 执行相同的查询,我收到:
{
"_rid": "...",
"Documents": [],
"_count": 0
}
这种差异因人而异。对于某些文档,我在门户数据资源管理器中收到它,对于其他文档,REST API 仅在数据资源管理器中收到。
我已经缩小了一个差异,但我不确定 'fix' 是什么(假设这是问题所在)。
如果我从门户导出 'Per-partition query metrics (CSV)',我可以看到在 REST api 上 return 的文档位于 'partition key range id' 0. 那些没有出现在 REST api 上(但出现在门户中)的在 'partition key range id' 1.
我需要在 REST api 上设置一些额外的配置或 header 吗?我设置了包含 x-ms-documentdb-query-enablecrosspartition
的请求 header 并在响应中接收到空的延续令牌。
补充说明: C# SDK(网关和直接)连接模式将 return REST API 不会的文件。
使用 REST API 执行查询时,请确保您正在使用和验证 x-ms-continuation
header。参考:https://docs.microsoft.com/rest/api/cosmos-db/common-cosmosdb-rest-response-headers
您可以重复(发送更多请求)直到响应中不返回继续令牌。
SDK 会有这种行为,这就是您看到这种差异的原因。它类似于迭代检查 HasMoreResults
或 FeedResponse
.
ContinuationToken
属性的查询