В этой главе мы приступим к работе с актуальными документами в коллекции. Вы можете создавать документы, используя портал Azure или .Net SDK.
Создание документов с помощью портала Azure
Давайте посмотрим на следующие шаги, чтобы добавить документ в вашу коллекцию.
Шаг 1 — Добавить новую коллекцию Семейный ценовой уровень S1 в myfirstdb.
Шаг 2 — Выберите коллекцию Families и нажмите опцию Create Document, чтобы открыть блейд New Document.
Это простой текстовый редактор, который позволяет вам вводить любой JSON для нового документа.
Шаг 3 — Поскольку это ввод необработанных данных, давайте введем наш первый документ.
{ "id": "AndersenFamily", "lastName": "Andersen", "parents": [ { "firstName": "Thomas", "relationship": "father" }, { "firstName": "Mary Kay", "relationship": "mother" } ], "children": [ { "firstName": "Henriette Thaulow", "gender": "female", "grade": 5, "pets": [ { "givenName": "Fluffy", "type": "Rabbit" } ] } ], "location": { "state": "WA", "county": "King", "city": "Seattle"}, "isRegistered": true }
Когда вы введете вышеуказанный документ, вы увидите следующий экран.
Обратите внимание, что мы предоставили идентификатор для документа. Значение id всегда требуется, и оно должно быть уникальным для всех других документов в той же коллекции. Когда вы его пропустите, DocumentDB автоматически сгенерирует его для вас, используя GUID или глобальный уникальный идентификатор.
Идентификатор всегда является строкой и не может быть числом, датой, логическим или другим объектом и не может быть длиннее 255 символов.
Также обратите внимание на иерархическую структуру документа, которая имеет несколько свойств верхнего уровня, таких как обязательный идентификатор, а также lastName и isRegistered, но также имеет вложенные свойства.
Например, свойство parent предоставляется в виде массива JSON, обозначенного квадратными скобками. У нас также есть другой массив для дочерних элементов, хотя в этом примере есть только один дочерний массив.
Шаг 4 — Нажмите кнопку «Сохранить», чтобы сохранить документ, и мы создали наш первый документ.
Как вы можете видеть, к нашему JSON было применено симпатичное форматирование, которое разбивает каждое свойство на отдельной строке с пробелами для передачи уровня вложенности каждого свойства.
Портал включает в себя проводник документов, поэтому давайте теперь воспользуемся им для получения только что созданного документа.
Шаг 5 — Выберите базу данных и любую коллекцию в базе данных, чтобы просмотреть документы в этой коллекции. В настоящее время у нас есть только одна база данных myfirstdb с одной коллекцией под названием Families, обе из которых были предварительно выбраны здесь в выпадающих списках.
По умолчанию в обозревателе документов отображается нефильтрованный список документов в коллекции, но вы также можете выполнить поиск любого конкретного документа по идентификатору или по нескольким документам на основе поиска по частичному идентификатору частичного идентификатора.
Пока у нас есть только один документ в нашей коллекции, и мы видим его идентификатор на следующем экране, AndersonFamily.
Шаг 6 — Нажмите на идентификатор, чтобы просмотреть документ.
Создание документов с помощью .NET SDK
Как вы знаете, документы — это просто другой тип ресурса, и вы уже познакомились с тем, как обращаться с ресурсами с помощью SDK.
-
Одно большое различие между документами и другими ресурсами заключается в том, что они, разумеется, не содержат схем.
-
Таким образом, вариантов много. Естественно, вы можете просто работать с графами объектов JSON или даже с необработанными строками текста JSON, но вы также можете использовать динамические объекты, которые позволяют связывать свойства во время выполнения, не определяя класс во время компиляции.
-
Вы также можете работать с реальными объектами C # или объектами, как они называются, которые могут быть классами вашего бизнес-домена.
Одно большое различие между документами и другими ресурсами заключается в том, что они, разумеется, не содержат схем.
Таким образом, вариантов много. Естественно, вы можете просто работать с графами объектов JSON или даже с необработанными строками текста JSON, но вы также можете использовать динамические объекты, которые позволяют связывать свойства во время выполнения, не определяя класс во время компиляции.
Вы также можете работать с реальными объектами C # или объектами, как они называются, которые могут быть классами вашего бизнес-домена.
Давайте начнем создавать документы с использованием .Net SDK. Ниже приведены шаги.
Шаг 1 — Создайте экземпляр DocumentClient, затем мы запросим базу данных myfirstdb, а затем запросим коллекцию MyCollection, которую мы храним в этой коллекции частных переменных, чтобы она была доступна всему классу.
private static async Task CreateDocumentClient() { // Create a new instance of the DocumentClient using (var client = new DocumentClient(new Uri(EndpointUrl), AuthorizationKey)) { database = client.CreateDatabaseQuery("SELECT * FROM c WHERE c.id = 'myfirstdb'").AsEnumerable().First(); collection = client.CreateDocumentCollectionQuery(database.CollectionsLink, "SELECT * FROM c WHERE c.id = 'MyCollection'").AsEnumerable().First(); await CreateDocuments(client); } }
Шаг 2 — Создайте несколько документов в задаче CreateDocuments.
private async static Task CreateDocuments(DocumentClient client) { Console.WriteLine(); Console.WriteLine("**** Create Documents ****"); Console.WriteLine(); dynamic document1Definition = new { name = "New Customer 1", address = new { addressType = "Main Office", addressLine1 = "123 Main Street", location = new { city = "Brooklyn", stateProvinceName = "New York" }, postalCode = "11229", countryRegionName = "United States" }, }; Document document1 = await CreateDocument(client, document1Definition); Console.WriteLine("Created document {0} from dynamic object", document1.Id); Console.WriteLine(); }
Первый документ будет создан из этого динамического объекта. Это может выглядеть как JSON, но, конечно, это не так. Это код C #, и мы создаем настоящий объект .NET, но нет определения класса. Вместо этого свойства выводятся из способа инициализации объекта.
Обратите внимание, что мы не предоставили свойство Id для этого документа.
Теперь давайте посмотрим на CreateDocument. Похоже на тот же шаблон, который мы видели при создании баз данных и коллекций.
private async static Task<Document> CreateDocument(DocumentClient client, object documentObject) { var result = await client.CreateDocumentAsync(collection.SelfLink, documentObject); var document = result.Resource; Console.WriteLine("Created new document: {0}\r\n{1}", document.Id, document); return result; }
Шаг 3 — На этот раз мы вызываем CreateDocumentAsync, определяя SelfLink коллекции, в которую мы хотим добавить документ. Мы получаем ответ со свойством ресурса, которое в данном случае представляет новый документ с его сгенерированными системой свойствами.
Объект Document — это определенный класс в SDK, который наследуется от ресурса и поэтому имеет все общие свойства ресурса, но также включает в себя динамические свойства, которые определяют сам документ без схемы.
private async static Task CreateDocuments(DocumentClient client) { Console.WriteLine(); Console.WriteLine("**** Create Documents ****"); Console.WriteLine(); dynamic document1Definition = new { name = "New Customer 1", address = new { addressType = "Main Office", addressLine1 = "123 Main Street", location = new { city = "Brooklyn", stateProvinceName = "New York" }, postalCode = "11229", countryRegionName = "United States" }, }; Document document1 = await CreateDocument(client, document1Definition); Console.WriteLine("Created document {0} from dynamic object", document1.Id); Console.WriteLine(); }
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод.
**** Create Documents **** Created new document: 34e9873a-94c8-4720-9146-d63fb7840fad { "name": "New Customer 1", "address": { "addressType": "Main Office", "addressLine1": "123 Main Street", "location": { "city": "Brooklyn", "stateProvinceName": "New York" }, "postalCode": "11229", "countryRegionName": "United States" }, "id": "34e9873a-94c8-4720-9146-d63fb7840fad", "_rid": "Ic8LAMEUVgACAAAAAAAAAA==", "_ts": 1449812756, "_self": "dbs/Ic8LAA==/colls/Ic8LAMEUVgA=/docs/Ic8LAMEUVgACAAAAAAAAAA==/", "_etag": "\"00001000-0000-0000-0000-566a63140000\"", "_attachments": "attachments/" } Created document 34e9873a-94c8-4720-9146-d63fb7840fad from dynamic object
Как вы можете видеть, мы не предоставили Id, однако DocumentDB сгенерировал его для нас для нового документа.