Azure CosmosDB REST API 忽略数据浏览器返回的结果

标签 azure azure-cosmosdb azure-cosmosdb-sqlapi

我有一个相当大的 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 将具有此行为,这就是您看到此差异的原因。它类似于迭代查询检查 HasMoreResultsFeedResponse 中的 ContinuationToken 属性。

关于Azure CosmosDB REST API 忽略数据浏览器返回的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59760389/

相关文章:

Azure流分析如何在从不同设备获取数据并且所有设备都有差异字段/属性时编写窗口函数

azure - 如何使用网络设置启动 azure 网站

c# - 当我只需要计数而不读取 Document-Db 数据库中的所有文档时,如何使用 Linq 构建 IQueryable 查询?

azure - 更新 Azure CosmosDB 分区键和分区键值

azure - 使用 SQL 查询更新 Azure Cosmos DB 中的所有项目

azure - Cosmos DB 中的 group by 问题

c# - Azure Batch 并确定 c# 中计算节点上下载的 EXE 的路径

azure - SendGrid 电子邮件在本地工作,但不适用于 Azure 应用服务

c# - 如何使用 C# 将 json 插入到 cosmos db 集合中

azure - 使用 cosmos db 中的表 API 在数据库级别配置吞吐量