【问题标题】:Azure CosmosDB REST API omits results that data explorer returnsAzure CosmosDB REST API 省略了数据资源管理器返回的结果
【发布时间】:2020-01-15 22:21:13
【问题描述】:

我有一个相当大的 cosmos db 集合(大约 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”1 中。

是否需要通过 REST api 设置一些额外的配置或标头?我设置了包括x-ms-documentdb-query-enablecrosspartition 在内的请求标头,并在响应中接收到空延续令牌。

补充说明: C# SDK(网关和直接)连接模式将返回 REST API 没有的文档。

【问题讨论】:

  • 您是否正在使用继续令牌 (x-ms-continuation) 响应标头? docs.microsoft.com/rest/api/cosmos-db/…
  • @MatiasQuaranta 似乎是这样。我在阅读{{token":null, ...}} 的意思是没有延续,但实际上只有省略 x-ms-continuation 标头意味着这一点。如果您想将其写为答案,我会将其设置为正确/可能添加一些内容

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

使用 REST API 执行查询时,请确保您正在使用并验证 x-ms-continuation 标头。参考:https://docs.microsoft.com/rest/api/cosmos-db/common-cosmosdb-rest-response-headers

您可以迭代(发送更多请求)直到响应中没有返回继续令牌。

SDK 会有这种行为,这就是您看到这种差异的原因。它类似于遍历查询以检查HasMoreResultsFeedResponse 中的ContinuationToken 属性。

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多