DocumentDB - Wstaw dokument

W tym rozdziale zajmiemy się rzeczywistymi dokumentami w kolekcji. Możesz tworzyć dokumenty za pomocą Azure Portal lub .Net SDK.

Tworzenie dokumentów za pomocą portalu Azure

Przyjrzyjmy się poniższym krokom, aby dodać dokument do Twojej kolekcji.

Step 1 - Dodaj nową kolekcję Rodziny warstw cenowych S1 w myfirstdb.

Step 2 - Wybierz kolekcję Rodziny i kliknij opcję Utwórz dokument, aby otworzyć blok Nowy dokument.

To tylko prosty edytor tekstu, który umożliwia wpisanie dowolnego kodu JSON dla nowego dokumentu.

Step 3 - Ponieważ jest to wprowadzanie danych surowych, przejdźmy do naszego pierwszego dokumentu.

{
   "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
}

Po wejściu do powyższego dokumentu zobaczysz następujący ekran.

Zauważ, że podaliśmy identyfikator dokumentu. Wartość id jest zawsze wymagana i musi być unikalna dla wszystkich innych dokumentów w tej samej kolekcji. Gdy go pominiesz, DocumentDB automatycznie wygeneruje go za pomocą identyfikatora GUID lub unikatowego identyfikatora globalnego.

Identyfikator jest zawsze ciągiem i nie może być liczbą, datą, wartością logiczną ani innym obiektem i nie może być dłuższy niż 255 znaków.

Zwróć także uwagę na hierarchiczną strukturę dokumentu, która ma kilka właściwości najwyższego poziomu, takich jak wymagany id, a także lastName i isRegistered, ale ma również właściwości zagnieżdżone.

Na przykład właściwość parent jest dostarczana jako tablica JSON oznaczona nawiasami kwadratowymi. Mamy również inną tablicę dla dzieci, mimo że w tym przykładzie jest tylko jedno dziecko w tablicy.

Step 4 - Kliknij przycisk „Zapisz”, aby zapisać dokument i stworzyliśmy nasz pierwszy dokument.

Jak widać, w naszym formacie JSON zastosowano ładne formatowanie, które rozbija każdą właściwość w osobnym wierszu z wcięciem spacją, aby przekazać poziom zagnieżdżenia każdej właściwości.

Portal zawiera eksplorator dokumentów, więc użyjmy go teraz, aby pobrać właśnie utworzony dokument.

Step 5- Wybierz bazę danych i dowolną kolekcję w bazie danych, aby wyświetlić dokumenty w tej kolekcji. Obecnie mamy tylko jedną bazę danych o nazwie myfirstdb z jedną kolekcją o nazwie Rodziny, z których obie zostały wstępnie wybrane w menu rozwijanym.

Domyślnie Eksplorator dokumentów wyświetla niefiltrowaną listę dokumentów w kolekcji, ale można również wyszukać dowolny określony dokument według identyfikatora lub wielu dokumentów na podstawie wyszukiwania wieloznacznego częściowego identyfikatora.

Jak dotąd mamy tylko jeden dokument w naszej kolekcji, a jego identyfikator widzimy na następnym ekranie, AndersonFamily.

Step 6 - Kliknij identyfikator, aby wyświetlić dokument.

Tworzenie dokumentów za pomocą zestawu .NET SDK

Jak wiesz, dokumenty to tylko inny rodzaj zasobów i już wiesz, jak traktować zasoby za pomocą zestawu SDK.

  • Jedna duża różnica między dokumentami a innymi zasobami polega na tym, że są one oczywiście wolne od schematów.

  • Tak więc istnieje wiele opcji. Oczywiście możesz po prostu pracować z grafami obiektów JSON, a nawet nieprzetworzonymi ciągami tekstu JSON, ale możesz także używać obiektów dynamicznych, które umożliwiają tworzenie powiązań z właściwościami w czasie wykonywania bez definiowania klasy w czasie kompilacji.

  • Możesz także pracować z rzeczywistymi obiektami C # lub encjami, jak są one nazywane, które mogą być klasami domeny biznesowej.

Zacznijmy tworzyć dokumenty przy użyciu .Net SDK. Oto kroki.

Step 1 - Utwórz instancję DocumentClient, a następnie zapytamy o bazę danych myfirstdb, a następnie o kolekcję MyCollection, którą przechowujemy w tej prywatnej kolekcji zmiennych, aby była dostępna w całej klasie.

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 - Utwórz dokumenty w zadaniu 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(); 
}

Pierwszy dokument zostanie wygenerowany z tego dynamicznego obiektu. To może wyglądać jak JSON, ale oczywiście tak nie jest. To jest kod C # i tworzymy rzeczywisty obiekt .NET, ale nie ma definicji klasy. Zamiast tego właściwości są wywnioskowane ze sposobu inicjowania obiektu.

Zauważ, że nie podaliśmy właściwości Id dla tego dokumentu.

Przyjrzyjmy się teraz CreateDocument. Wygląda jak ten sam wzorzec, który widzieliśmy przy tworzeniu baz danych i kolekcji.

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- Tym razem wywołujemy CreateDocumentAsync, określając SelfLink kolekcji, do której chcemy dodać dokument. Otrzymujemy odpowiedź z właściwością zasobu, która w tym przypadku reprezentuje nowy dokument z jego właściwościami wygenerowanymi przez system.

Obiekt Document jest zdefiniowaną klasą w SDK, która dziedziczy po zasobie, a więc ma wszystkie typowe właściwości zasobów, ale zawiera również właściwości dynamiczne, które definiują sam dokument bez schematu.

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

Kiedy powyższy kod zostanie skompilowany i wykonany, otrzymasz następujące dane wyjściowe.

**** 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

Jak widać, nie dostarczyliśmy identyfikatora, jednak DocumentDB wygenerował go dla nas dla nowego dokumentu.