【问题标题】:How to get more than 100 query results with Azure DocumentDB REST API如何使用 Azure DocumentDB REST API 获得 100 多个查询结果
【发布时间】:2017-03-05 03:11:54
【问题描述】:

我正在关注下面的 Azure DocumentDB 示例。在示例中,C# 代码查询 DocumentDB 中的文档。

https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/rest-from-.net/Program.cs

第 182 行:

var qry = new SqlQuerySpec { query = "SELECT * FROM root" }; 
var r = client.PostWithNoCharSetAsync(new Uri(baseUri, resourceLink), qry).Result; 

问题是结果“r”只包含前 100 个文档。如果我使用Client SDK,我可以获得100多个。我尝试使用流,但到目前为止没有运气。任何帮助将不胜感激!

【问题讨论】:

    标签: rest azure azure-cosmosdb


    【解决方案1】:

    对于 SQL 查询,如果结果集太大,结果将分段返回。默认情况下,结果以 100 项或 1 MB(以先达到的限制为准)为单位返回。

    您可以使用延续标记来获取一个接一个的每个段。或者您在请求中设置 x-ms-max-item-count 自定义标头以将限制增加到适当的值。

    您可以查看REST API 了解更多详情。

    对于示例程序,您必须添加行

    client.DefaultRequestHeaders.Add("x-ms-max-item-count", "1000");
    

    为了得到 1000 个文档而不是 100 个。

    【讨论】:

      【解决方案2】:

      我只是在这里猜测,但可能值得一试。以下是 MSDN 中描述 List 操作的文档:

      https://docs.microsoft.com/en-us/rest/api/documentdb/list-documents

      在“响应”下的“标题”部分中,提到您可能会在标题“x-ms-continuation”中获得一个可选标记。根据描述,您必须使用指定的此令牌发出另一个 GET 请求,以获取结果集的其他元素。

      你能检查你是否在响应中得到这样的标题吗?如果是这样,您可以发出另一个指定此令牌的获取请求(请参阅“请求”下的同一文档页面)。

      【讨论】:

      • 在我的情况下,返回值超过 1000,我确实必须使用延续令牌。谢谢!
      • 我很高兴我的预感没有那么愚蠢:)
      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2018-02-04
      • 2021-03-27
      • 2017-07-28
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多