Чтение одного документа из DocumentDB - PullRequest
0 голосов
/ 29 декабря 2018

Я не могу прочитать один документ по id из DocumentDB.Я создаю приложение, и у меня есть точная проблема, как этот .Я не понимаю, чего мне не хватает.Допустим, у меня есть коллекция Users, и у меня есть / UserId для ключа раздела, я не могу прочитать документ, я всегда получаю «Resource Not Found».Это сбивает с толку, потому что в соответствии с документацией Microsoft, я могу предоставить Uri только для метода ReadDocumentAsync, но для этого требуется получить ключ раздела ошибки.Я понимаю ключи разделов, но мне трудно понять, как они связаны с документом.Например, мой ключ раздела - это / UserId, который является путем, для метода ReadDocumentAsync Я фактически должен указать значение ключа раздела.И мне трудно понять, что это за значение.

Я попытался создать документ с кодом C # и получить тот же документ с идентификатором, созданным системой (GUID), он не работает ... Это звучит просто и просто, нокто-то может указать мне, где я не прав?Или покажите мне ссылку на код C # .NET Core, который я могу использовать, образец коллекции, образец документа и пример кода.Документация Microsoft / пример кода не работает для меня.

Мой код выглядит так:

            documentId = "1c230b2d-1e37-9e02-d3a0-10364a188487";
            collectionId = "Users";
            RequestOptions options = new RequestOptions();
            options.PartitionKey = new PartitionKey("201801-M");
            var document = await _serverConnection.ReadDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, documentId),options);
            return document;

Моя БД выглядит так:

enter image description here

И мой ключ раздела выглядит так:

enter image description here

Ответы [ 2 ]

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

У меня была эта проблема.Решение для меня состояло в том, чтобы PartitionKey с его значением был записан в объект данных json точно , как в коллекции.Например, если ключом раздела вашей коллекции является / state, и вам нужно значение «Florida», то в вашем объекте данных json должно содержаться следующее в данных json: «state»: «Florida» в вашем WriteDocumentAsync.В моем случае я использую динамические данные json, поэтому мне пришлось ввести ключ и значение ключа в мой объект данных json.Если это не сделано правильно, вы получите сообщение об ошибке, объект с указанным идентификатором не был найден при попытке прочитать данные.У вас есть два варианта: 1 записать данные с соответствующим ключом раздела в коллекцию или 2 в опциях запроса используйте «Undefined.Value» для ключа раздела.Использование Undefined.Value найдет любой соответствующий идентификатор в коллекции.При чтении документа обратно с использованием ReadDocumentAsync вы должны установить в свой RequestOptions.PartitionKey желаемое значение ключа раздела, которое вы ищете.Надеюсь, это поможет.

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

Это моя проблема с эмулятором, которую я использую на машине.Я подключился к фактическому CosmosDB, и он работает нормально ... Мой эмулятор глючил и выдает ошибки, перестает работать, начинает работать, и как только я подключился к Azure, все нормально получало пример данных.

...