Как получить максимальное значение идентификатора из космоса БД, используя запрос - PullRequest
0 голосов
/ 24 мая 2019

Я хочу получить максимум идентификатора из космической БД.Приведенный ниже код работает хорошо, пока база данных cosmos не содержит документов меньше 1000. Если он превышает, он всегда дает максимальное значение 999.

Попытка добавления MaxItemCount = -1 в FeedOptions.

public async Task<int> GetMaxId()
        {
            try
            {
                var option = new FeedOptions { EnableCrossPartitionQuery = true ,MaxItemCount=-1};
                // SQL
                var familiesSqlQuery = client.CreateDocumentQuery(cosmosConnector,
                    "SELECT value max(c.id) FROM c", option).AsDocumentQuery();
                var val = await familiesSqlQuery.ExecuteNextAsync();

                var s = val.FirstOrDefault();
                return int.Parse(s.ToString());
            }
            catch
            {
                throw;
            }
        }

1 Ответ

0 голосов
/ 24 мая 2019

Надежный способ добиться того, чего вы хотите, заключается в следующем:

public async Task<int> GetMaxId()
{
    try
    {
        var maxValue = 0;
        var option = new FeedOptions { EnableCrossPartitionQuery = true };
        // SQL
        var familiesSqlQuery = client.CreateDocumentQuery(cosmosConnector,
            "SELECT c.id FROM c", option).AsDocumentQuery();

        while(familiesSqlQuery.HasMoreResults)
        {
            var ids = await familiesSqlQuery.ExecuteNextAsync();
            var maxIdInBatch = ids.Select(int.Parse).Max();
            if(maxIdInBatch > maxValue)
            {
                maxValue = maxIdInBatch;
            }           
        }

        return maxValue;
    }
    catch
    {
        throw;
    }
}

Причина, по которой это так, заключается в том, что ваши RU не будут исчерпаны за один вызов, потому что вы будете разбивать на страницы всерезультаты, достижения.Это займет больше времени, но будет надежным и точным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...