我有一个相当大的 Cosmos 数据库集合(大约 150 万条记录)。如果我在数据浏览器中对索引字段运行查询,例如:
SELECT * FROM c WHERE ARRAY_CONTAINS(c.InnerArray, { "MyValue": 1234 }, true)
我收到了预期的结果。
如果我通过收到的 REST API 执行相同的查询:
{
"_rid": "...",
"Documents": [],
"_count": 0
}
这种差异各不相同。对于某些文档,我在门户数据浏览器中收到它,而对于其他文档,我仅在数据浏览器中收到 REST API。
我已经缩小了一个差异,但我不确定“修复”是什么(假设这就是问题所在)。
如果我从门户导出“每分区查询指标 (CSV)”,我可以看到通过 REST API 返回的文档在“分区键范围 id”0 内找到。未出现在 REST API 上(但出现在门户中)的分区键范围 ID 位于“分区键范围 id”1 中。
是否需要通过 REST API 设置一些额外的配置或 header ?我设置了包括 x-ms-documentdb-query-enablecrosspartition
的请求 header ,并在响应中接收空连续 token 。
附加说明: C# SDK(Gateway 和 Direct)连接模式将返回 REST API 不会返回的文档。
最佳答案
使用 REST API 执行查询时,请确保您正在使用并验证 x-ms-continuation
header 。引用:https://learn.microsoft.com/rest/api/cosmos-db/common-cosmosdb-rest-response-headers
您可以迭代(发送更多请求),直到响应中不再返回延续 token 。
SDK 将具有此行为,这就是您看到此差异的原因。它类似于迭代查询检查 HasMoreResults
或 FeedResponse
中的 ContinuationToken
属性。
关于Azure CosmosDB REST API 忽略数据浏览器返回的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59760389/