DocumentDB - Вставить документ

В этой главе мы приступим к работе с реальными документами в коллекции. Вы можете создавать документы с помощью портала Azure или .Net SDK.

Создание документов на портале Azure

Давайте посмотрим на следующие шаги, чтобы добавить документ в вашу коллекцию.

Step 1 - Добавить новую коллекцию Семей ценовой категории S1 в myfirstdb.

Step 2 - Выберите коллекцию «Семьи» и нажмите «Создать документ», чтобы открыть колонку «Новый документ».

Это простой текстовый редактор, который позволяет вам вводить любой JSON для нового документа.

Step 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, обозначенного квадратными скобками. У нас также есть еще один массив для дочерних элементов, хотя в этом примере в массиве только один дочерний элемент.

Step 4 - Нажмите кнопку «Сохранить», чтобы сохранить документ, и мы создали наш первый документ.

Как вы можете видеть, к нашему JSON было применено красивое форматирование, которое разбивает каждое свойство на отдельную строку с отступом пробела, чтобы передать уровень вложенности каждого свойства.

Портал включает в себя проводник документов, поэтому давайте воспользуемся им сейчас, чтобы получить документ, который мы только что создали.

Step 5- Выберите базу данных и любую коллекцию в базе данных, чтобы просмотреть документы в этой коллекции. В настоящее время у нас есть только одна база данных с именем myfirstdb с одной коллекцией под названием Families, обе из которых были предварительно выбраны здесь в раскрывающихся списках.

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

Пока у нас есть только один документ в нашей коллекции, и мы видим его идентификатор на следующем экране, AndersonFamily.

Step 6 - Щелкните идентификатор, чтобы просмотреть документ.

Создание документов с помощью .NET SDK

Как вы знаете, документы - это просто еще один тип ресурсов, и вы уже знакомы с тем, как обращаться с ресурсами с помощью SDK.

  • Одно большое различие между документами и другими ресурсами заключается в том, что они, конечно, не содержат схемы.

  • Таким образом, есть много вариантов. Естественно, вы можете просто работать с графами объектов JSON или даже с необработанными строками текста JSON, но вы также можете использовать динамические объекты, которые позволяют выполнять привязку к свойствам во время выполнения без определения класса во время компиляции.

  • Вы также можете работать с реальными объектами C # или Entities, как они называются, которые могут быть классами вашей бизнес-области.

Приступим к созданию документов с помощью .Net SDK. Ниже приведены шаги.

Step 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); 
   } 
}

Step 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; 
}

Step 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

Как видите, мы не предоставили идентификатор, однако DocumentDB сгенерировал его для нового документа.