CosmosDB Paging Возвращаемое значение - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь вернуть результаты подкачки на запрос от 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>();
}

Должен ли я вернуть его напрямую? Или я должен сделать что-то еще с переменной response? Я пытался вернуть переменную ответа напрямую, и она не работает. Вот мой код:

 public async Task<IEnumerable<T>> RunQueryAsync(string queryString)
        {

            var feedOptions = new FeedOptions { MaxItemCount = 3 };
            IQueryable<T> filter = _client.CreateDocumentQuery<T>(_collectionUri, queryString, feedOptions);
            IDocumentQuery<T> query = filter.AsDocumentQuery();
            var response = new FeedResponse<T>();
            while (query.HasMoreResults)
            {
                response = await query.ExecuteNextAsync<T>();
            }
            return response;
        }

Обновление : Прочитав ответ @Evandro Paula, я следовал по URL и изменил свою реализацию на нижеприведенную. Но он все еще дает мне 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;
        }

А вот и сообщение об исключении:

Требуется перекрестный раздел, но он отключен. Пожалуйста, установите x-ms-documentdb-query-enablecrosspartition в true, укажите x-ms-documentdb-partitionkey, или пересмотрите ваш запрос, чтобы избежать этого исключение., Windows / 10.0.17134 documentdb-netcore-sdk / 1.9.1

Обновление 2 : Я добавил EnableCrossPartitionQuery к истине, и я могу получить ответ от CosmosDB. Но я не могу получить 1 предмет, который я определил. Вместо этого я получил 11 предметов.

Ответы [ 2 ]

0 голосов
/ 18 июля 2018

вы не указываете какие-либо критерии для вашего конкретного элемента ... поэтому вы получаете все результаты .. попробуйте указать критерии для элемента (идентификатор, имя и т. Д.), Который вы ищете. И имейте в виду, что запросы между разделами потребляют гораздо больше RU и времени, вы можете пересмотреть архитектуру своей модели данных. В идеале всегда выполнять запросы в одном разделе

0 голосов
/ 03 июля 2018

Ниже приведен простой пример использования постраничного запроса 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++;
        }
    }

За исключение, описанное в вашем вопросе Требуется перекрестный раздел, но он отключен , обновите параметры канала следующим образом:

var feedOptions = new FeedOptions { MaxItemCount = 1, EnableCrossPartitionQuery = true};

Найдите более полный пример на https://github.com/Azure/azure-documentdb-dotnet/blob/d17c0ca5be739a359d105cf4112443f65ca2cb72/samples/code-samples/Queries/Program.cs#L554-L576.

...