Выберите документы случайно - PullRequest
0 голосов
/ 26 декабря 2018

Я хотел бы знать, есть ли способ случайного выбора документов в CosmosDB (Microsoft Azure).

Вот мой код, я не знаю, что добавить перед «Take (20)»:

public List<LeafBook> BooksList { get; private set; }

public async Task<List<LeafBook>> GetBookAsync()
{
    try
    {
        // The query excludes completed TodoItems

        var query = client.CreateDocumentQuery<LeafBook>(collectionLink, new FeedOptions { MaxItemCount = -1 })

             .Take(20)            
             .AsDocumentQuery();

        BooksList = new List<LeafBook>();
        while (query.HasMoreResults)
        {
            BooksList.AddRange(await query.ExecuteNextAsync<LeafBook>());
        }

    }
    catch (Exception e)
    {
        Console.Error.WriteLine(@"ERROR {0}", e.Message);
        return null;
    }
    return BooksList;
}

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вот как бы я это сделал.

  1. Получите общее количество документов в коллекции, используя
    dc.CreateDocumentQuery(update.SelfLink, "SELECT c.id FROM c")

  2. Используйте Random, чтобы выбрать случайные int с между 0 и суммой (минус 1), полученной выше.

  3. Получить документы, соответствующие id s, полученным (на шаге 1) по индексам (на шаге 2)

У меня естьне пробовал это, но дайте мне знать!

0 голосов
/ 27 декабря 2018

kikis, как сказал @David Makogon в комментарии, вы можете следовать sample , который связан с feedback , чтобы получить случайный результат в cosmos db mongo api.

Однако в cosmos db sql api такой нативной функции нет.Так что, может быть, вам нужно принять обходной путь.

Вы можете использовать stored procedure для реализации такой функции в cosmos db, пожалуйста, обратитесь к этому блогу .

В этом обходном путисамое важное, что он потенциально может перебирать всю коллекцию, в зависимости от значения filterString, которое вы передаете sproc при выполнении.Вы должны убедиться, что filterString максимально облегчен для базы данных.

Или вы можете просто получить 20 случайных NumberoftheBook свойств перед запросом и использовать их для фильтра запросов.

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