如何使用 Azure DocumentDB REST 获取超过 100 个查询结果 API

How to get more than 100 query results with Azure DocumentDB REST API

我正在关注下面的 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 个。我尝试使用流,但到目前为止运气不好。如有任何帮助,我们将不胜感激!

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

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

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

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

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

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

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

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

在 "Response" 下的 "Headers" 部分提到您可能会在 header "x-ms-continuation" 中获得一个可选令牌。根据描述,您必须使用指定的此令牌发出另一个 GET 请求才能获取结果集的其他元素。

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