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 会有这种行为,这就是您看到这种差异的原因。它类似于迭代检查 HasMoreResultsFeedResponse.

中的 ContinuationToken 属性的查询