Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest CosmosDB分页返回值_Rest_Azure_Asp.net Core_Azure Cosmosdb_Paging - Fatal编程技术网

Rest CosmosDB分页返回值

Rest CosmosDB分页返回值,rest,azure,asp.net-core,azure-cosmosdb,paging,Rest,Azure,Asp.net Core,Azure Cosmosdb,Paging,我正试图返回CosmosDB请求的分页结果。我从中看到了这个示例,但我不确定如何处理response变量 // Fetch query results 10 at a time. var queryable = client.CreateDocumentQuery<Book>(collectionLink, new FeedOptions { MaxItemCount = 10 }); while (queryable.HasResults) { FeedResponse&l

我正试图返回CosmosDB请求的分页结果。我从中看到了这个示例,但我不确定如何处理
response
变量

// Fetch query results 10 at a time.
var queryable = client.CreateDocumentQuery<Book>(collectionLink, new FeedOptions { MaxItemCount = 10 });
while (queryable.HasResults)
{
    FeedResponse<Book> response = await queryable.ExecuteNext<Book>();
}
更新: 在阅读了@Evandro Paula的答案后,我遵循了下面的步骤,并将我的实现更改为以下内容。但它仍然给了我500个状态码:

 public async Task<IEnumerable<T>> RunQueryAsync(string queryString)
        {
            var feedOptions = new FeedOptions { MaxItemCount = 1 };
            IQueryable<T> filter = _client.CreateDocumentQuery<T>(_collectionUri, queryString, feedOptions);
            IDocumentQuery<T> query = filter.AsDocumentQuery();
            List<T> results = new List<T>();
            while (query.HasMoreResults)
            {
                foreach (T t in await query.ExecuteNextAsync())
                {
                    results.Add(t);
                }
            }
            return results;
        }
public异步任务RunQueryAsync(字符串queryString)
{
var feedOptions=newfeedoptions{MaxItemCount=1};
IQueryable筛选器=_client.CreateDocumentQuery(_collectionUri、queryString、feedOptions);
IDocumentQuery=filter.AsDocumentQuery();
列表结果=新列表();
while(query.HasMoreResults)
{
foreach(T在wait query.ExecuteNextAsync()中)
{
结果:添加(t);
}
}
返回结果;
}
以下是异常消息:

跨分区查询是必需的,但已禁用。请设定 x-ms-documentdb-query-enablecrosspartition为true,指定 x-ms-documentdb-partitionkey,或修改查询以避免此问题 例外情况,Windows/10.0.17134 documentdb netcore sdk/1.9.1

更新2
我将
EnableCrossPartitionQuery
添加为true,并且我能够从CosmosDB获得响应。但我无法获得我定义的1项。相反,我得到了11项。

下面是一个关于如何使用CosmosDB/SQL分页查询的简单示例:

    private static async Task Query()
    {
        Uri uri = new Uri("https://{CosmosDB/SQL Account Name}.documents.azure.com:443/");
        DocumentClient documentClient = new DocumentClient(uri, "{CosmosDB/SQL Account Key}");

        int currentPageNumber = 1;
        int documentNumber = 1;

        IDocumentQuery<Book> query = documentClient.CreateDocumentQuery<Book>("dbs/{CosmoDB/SQL Database Name}/colls/{CosmoDB/SQL Collection Name}", new FeedOptions { MaxItemCount = 10 }).AsDocumentQuery();

        while (query.HasMoreResults)
        {
            Console.WriteLine($"----- PAGE {currentPageNumber} -----");

            foreach (Book book in await query.ExecuteNextAsync())
            {
                Console.WriteLine($"[{documentNumber}] {book.Id}");
                documentNumber++;
            }

            currentPageNumber++;
        }
    }

查看更全面的示例。

下面是一个关于如何使用CosmosDB/SQL分页查询的简单示例:

    private static async Task Query()
    {
        Uri uri = new Uri("https://{CosmosDB/SQL Account Name}.documents.azure.com:443/");
        DocumentClient documentClient = new DocumentClient(uri, "{CosmosDB/SQL Account Key}");

        int currentPageNumber = 1;
        int documentNumber = 1;

        IDocumentQuery<Book> query = documentClient.CreateDocumentQuery<Book>("dbs/{CosmoDB/SQL Database Name}/colls/{CosmoDB/SQL Collection Name}", new FeedOptions { MaxItemCount = 10 }).AsDocumentQuery();

        while (query.HasMoreResults)
        {
            Console.WriteLine($"----- PAGE {currentPageNumber} -----");

            foreach (Book book in await query.ExecuteNextAsync())
            {
                Console.WriteLine($"[{documentNumber}] {book.Id}");
                documentNumber++;
            }

            currentPageNumber++;
        }
    }

请在找到一个更全面的示例。

您没有为特定项目指定任何where条件…因此您得到了所有结果。请尝试为您要查找的项目(id、名称等)指定条件。请记住,跨分区查询占用的时间要多得多,您可以重新访问数据模型的体系结构。理想情况下,始终在同一分区中执行查询。您没有为特定项指定任何where条件…因此您将获得所有结果。请尝试为您要查找的项(id、名称等)指定条件。请记住,跨分区查询会占用更多的时间,您可以重新访问数据模型的体系结构。理想情况下,始终在同一分区中执行查询谢谢您的回复。我遵循了你提供的URL,但由于某种原因它仍然不起作用。我已补充上述问题的最后部分。谢谢请使用您看到的异常更新问题。将提要选项更改为var feedOptions=new feedOptions{MaxItemCount=1,enableCrospartitionQuery=true};是的,你说得对。我可以从CosmosDB获得响应,但我得到的是所有项目,而不是我指定的1个项目。这是因为您在返回之前将所有结果添加到列表中(例如while(query.HasMoreResults){})。谢谢您的回复。我遵循了你提供的URL,但由于某种原因它仍然不起作用。我已补充上述问题的最后部分。谢谢请使用您看到的异常更新问题。将提要选项更改为var feedOptions=new feedOptions{MaxItemCount=1,enableCrospartitionQuery=true};是的,你说得对。我可以从CosmosDB获得响应,但我得到的是所有项目,而不是我指定的1个项目。这是因为您在返回之前将所有结果添加到列表中(例如while(query.HasMoreResults){})。但我认为MaxItemCount是定义一个页面中有多少文档的一个。。为什么我们需要指定更多的条件?可能总共有11个文档…页面大小为1(MaxItemCount)…但是查询执行11次作为查询。HasMoreResults在所有记录之前都为true。但是如果您需要某些特定项,您需要通过linq添加条件,只需在删除查询时尝试一次。HasMoreResults..然后它应该只返回1个文档,但这可能是任何随机文档,但我认为MaxItemCount可以定义一页中有多少文档。。为什么我们需要指定更多的条件?可能总共有11个文档…页面大小为1(MaxItemCount)…但是查询执行11次作为查询。HasMoreResults在所有记录之前都为true。但是如果您需要某些特定项,您需要通过linq添加条件,只需在删除查询时尝试一次。HasMoreResults..然后它应该只返回1个文档,但那可能是任何随机的医生
var feedOptions = new FeedOptions { MaxItemCount = 1, EnableCrossPartitionQuery = true};