CosmosClient только для чтения () возвращает объект, если указаны идентификатор и значение ключа раздела - PullRequest
0 голосов
/ 07 апреля 2020

Я установил экземпляр CosmosDB и поместил один тестовый объект в контейнер products. Ключ разделения установлен на /price.

{
    "id": "1234",
    "name": "A DB product",
    "price": 12,
    "_rid": "RsMLAID7jXIBAAAAAAAAAA==",
    "_self": "dbs/RsMLAA==/colls/RsMLAID7jXI=/docs/RsMLAID7jXIBAAAAAAAAAA==/",
    "_etag": "\"270011a1-0000-0200-0000-5e8c61ef0000\"",
    "_attachments": "attachments/",
    "_ts": 1586258415
}

Если я прочитаю все элементы контейнера, я вернусь к этому конкретному элементу:

const client = new CosmosClient(process.env.CosmosDbConnectionString);
const database = client.database("maindb");
const container = database.container("products");
const items = await container.items.readAll().fetchAll()

Это то, что я вижу в отладчик: enter image description here

Если я попытаюсь получить тот же элемент по id, элемент не будет найден:

const item1 = await container.item("1234").read()

Это приводит к:

enter image description here

Единственный способ заставить его работать - изменить код чтения на:

const item1 = await container.item("1234", 12).read()

Это означает, что я должен указать точное значение ключа раздела, но что, если я хочу запросить просто по идентификатору?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

@ Krumelur

Для многораздельной коллекции вы должны будете указать ключ разделения при чтении элемента по идентификатору. Для однораздельной коллекции вам не нужно указывать ключ раздела.

Если вы хотите получить элемент по идентификатору без ключа раздела, вы можете использовать items.query. Это вернет все элементы с указанным Id в запросе. Если идентификатор уникален, вы получите только один предмет. Имейте в виду, что этот запрос должен искать все разделы, чтобы найти элемент, поскольку вы не предоставляете ключ раздела.

1 голос
/ 07 апреля 2020

Это означает, что я должен указать точное значение ключа раздела, но что, если я хочу сделать запрос только по идентификатору?

Это правильно. Комбинация PartitionKey и id однозначно идентифицирует документ. Вы можете иметь два документа в разных разделах с одинаковым идентификатором.

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