Cosmos DB читает отдельный документ без ключа раздела - PullRequest
0 голосов
/ 09 июля 2020

Контейнер имеет функцию ReadItemAsyn c. Проблема в том, что у меня нет ключа раздела, а только идентификатор документа. Тогда как лучше всего получить всего один предмет?

Нужно ли мне получать его из коллекции? Как:

var allItemsQuery = VesselContainer.GetItemQueryIterator<CoachVessel>("SELECT * FROM c where c.id=....");

var q = VesselContainer.GetItemLinqQueryable<CoachVessel>();
var iterator = q.ToFeedIterator();

var result = new List<CoachVessel>();
while (iterator.HasMoreResults)
{
    foreach (var item in await iterator.ReadNextAsync())
    {
        result.Add(item);
    }
}

1 Ответ

0 голосов
/ 09 июля 2020

Отправка в качестве ответа.

Да, вам нужно выполнить разветвленный запрос, но идентификатор различается только для каждого ключа раздела, поэтому даже в этом случае вы можете получить несколько элементов. Честно говоря, если у вас нет ключа раздела для точечного чтения, то модель для базы данных неверна. Его (или само приложение) следует переделать.

Дополнительно. Для небольших однораздельных коллекций этот запрос x-секций не будет слишком дорогим, поскольку коллекция мала. Однако, как только база данных начнет масштабироваться, это будет становиться все медленнее и дороже, поскольку запрос будет распространяться на все большее количество физических разделов. Как указано выше, я настоятельно рекомендую вам изменить приложение, чтобы передать значение ключа раздела в запросе. Это позволит вам выполнить операцию чтения одной точки, которая будет чрезвычайно быстрой и эффективной.

Удачи.

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