DocumentDB - Inserisci documento

In questo capitolo, lavoreremo con i documenti effettivi in ​​una raccolta. È possibile creare documenti usando il portale di Azure o .Net SDK.

Creazione di documenti con il portale di Azure

Diamo un'occhiata ai seguenti passaggi per aggiungere un documento alla tua raccolta.

Step 1 - Aggiungi una nuova raccolta Famiglie del piano tariffario S1 in myfirstdb.

Step 2 - Seleziona la raccolta Famiglie e fai clic sull'opzione Crea documento per aprire il pannello Nuovo documento.

Questo è solo un semplice editor di testo che ti consente di digitare qualsiasi JSON per un nuovo documento.

Step 3 - Poiché si tratta di immissione di dati grezzi, inseriamo il nostro primo documento.

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

Quando si accede al documento di cui sopra, verrà visualizzata la seguente schermata.

Notare che abbiamo fornito un ID per il documento. Il valore id è sempre obbligatorio e deve essere univoco in tutti gli altri documenti nella stessa raccolta. Quando lo lasci fuori, DocumentDB ne genererà automaticamente uno per te utilizzando un GUID o un identificatore univoco globale.

L'id è sempre una stringa e non può essere un numero, una data, un valore booleano o un altro oggetto e non può essere più lungo di 255 caratteri.

Notare anche la struttura gerarchica del documento che ha alcune proprietà di primo livello come l'id richiesto, nonché lastName e isRegistered, ma ha anche proprietà nidificate.

Ad esempio, la proprietà parent viene fornita come array JSON come indicato dalle parentesi quadre. Abbiamo anche un altro array per i bambini, anche se c'è un solo figlio nell'array in questo esempio.

Step 4 - Fare clic sul pulsante "Salva" per salvare il documento e abbiamo creato il nostro primo documento.

Come puoi vedere, al nostro JSON è stata applicata una formattazione carina, che suddivide ogni proprietà sulla propria riga indentata con uno spazio bianco per trasmettere il livello di nidificazione di ciascuna proprietà.

Il portale include un Document Explorer, quindi usiamolo ora per recuperare il documento che abbiamo appena creato.

Step 5- Scegli un database e qualsiasi raccolta all'interno del database per visualizzare i documenti in quella raccolta. Al momento disponiamo di un solo database denominato myfirstdb con una raccolta denominata Famiglie, entrambe preselezionate qui nei menu a discesa.

Per impostazione predefinita, Document Explorer visualizza un elenco non filtrato di documenti all'interno della raccolta, ma è anche possibile cercare qualsiasi documento specifico per ID o più documenti in base a una ricerca con caratteri jolly di un ID parziale.

Finora abbiamo un solo documento nella nostra raccolta e vediamo il suo ID nella schermata seguente, AndersonFamily.

Step 6 - Fare clic sull'ID per visualizzare il documento.

Creazione di documenti con .NET SDK

Come sai che i documenti sono solo un altro tipo di risorsa e hai già acquisito familiarità con come trattare le risorse utilizzando l'SDK.

  • L'unica grande differenza tra i documenti e le altre risorse è che, ovviamente, sono privi di schemi.

  • Quindi ci sono molte opzioni. Naturalmente, puoi lavorare solo con grafici a oggetti JSON o anche stringhe non elaborate di testo JSON, ma puoi anche utilizzare oggetti dinamici che ti consentono di collegarti a proprietà in fase di esecuzione senza definire una classe in fase di compilazione.

  • È inoltre possibile lavorare con oggetti C # reali, o entità come vengono chiamate, che potrebbero essere le classi del dominio aziendale.

Cominciamo a creare documenti usando .Net SDK. Di seguito sono riportati i passaggi.

Step 1 - Istanziare DocumentClient, quindi interrogheremo il database myfirstdb e quindi interrogheremo la raccolta MyCollection, che memorizziamo in questa raccolta di variabili private in modo che sia accessibile in tutta la classe.

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 - Crea alcuni documenti nell'attività 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(); 
}

Il primo documento verrà generato da questo oggetto dinamico. Potrebbe sembrare JSON, ma ovviamente non lo è. Questo è codice C # e stiamo creando un vero oggetto .NET, ma non esiste una definizione di classe. Le proprietà vengono invece dedotte dal modo in cui viene inizializzato l'oggetto.

Si noti che non abbiamo fornito una proprietà Id per questo documento.

Ora diamo uno sguardo a CreateDocument. Sembra lo stesso modello che abbiamo visto per la creazione di database e raccolte.

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- Questa volta chiamiamo CreateDocumentAsync specificando il SelfLink della raccolta a cui vogliamo aggiungere il documento. Riceviamo una risposta con una proprietà della risorsa che, in questo caso, rappresenta il nuovo documento con le sue proprietà generate dal sistema.

L'oggetto Document è una classe definita nell'SDK che eredita dalla risorsa e quindi ha tutte le proprietà comuni della risorsa, ma include anche le proprietà dinamiche che definiscono il documento senza schema stesso.

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

Quando il codice precedente viene compilato ed eseguito, riceverai il seguente output.

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

Come puoi vedere, non abbiamo fornito un ID, tuttavia DocumentDB lo ha generato per noi per il nuovo documento.