Cosmos DB结果在较大的搜索中丢失

时间:2017-11-01 16:24:38

标签: sql azure-cosmosdb

我想知道我是否可能达到导致这种情况的某种限制。我运行了一个查询,证明在通过三个字段PLUS唯一ID进行过滤时,Cosmos DB文档集合中存在记录,但是当我删除唯一ID时,我得到124个结果,其中没有一个是原始记录。

如果我在Azure门户中运行以下实时查询,我会得到一个结果,这是我期望的项目:

-- 1 result, item 'ABCD-EFGH-IJKL-MNOP' present and correct
SELECT
    *
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16
AND a.uniqueId = 'ABCD-EFGH-IJKL-MNOP'

当我删除最后一行时,我得到 124 结果,但不是具有唯一ID的项目' ABCD-EFGH-IJKL-MNOP'。

-- 124 results, item 'ABCD-EFGH-IJKL-MNOP' missing
SELECT
    *
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16

每条记录实际上都很大,因为该文档包含大量信息。如果我再次将查询更改为:

-- 150 results, item 'ABCD-EFGH-IJKL-MNOP' present and correct
SELECT 
    a.width,
    a.height,
    a.depth,
    a.uniqueId
FROM a
WHERE a.width = 205
AND a.height = 55
AND a.depth = 16

我得到 150 结果,结果神奇地弹回到结果中......

结果被遗漏会有一些限制吗?

附加说明:

  1. 我在查询资源管理器中对此进行测试
  2. 我已更改"设置 - >每页项目"到"无限"

1 个答案:

答案 0 :(得分:3)

即使您运行查询“无限制”(FeedOptions.MaxItemCount设置为-1),仍然可以根据返回的数据量对结果进行分页。

您可以检测到这一点,因为标记Has More Results返回true

if (queryable.HasMoreResults)
{
    //... there are more results
}

运行无限制查询时,您可能不会期望这样。

如果您使用的是REST API,则会有一个标题:

x-ms-continuation=randomlookingstring

您可以在后续请求中传回此标头,然后重新开始查询。

我目前正在寻找有关限制的文档,并会在找到时更新。