DocumentDB - Insérer un document

Dans ce chapitre, nous allons travailler avec des documents réels dans une collection. Vous pouvez créer des documents à l'aide du portail Azure ou du SDK .Net.

Création de documents avec le portail Azure

Jetons un coup d'œil aux étapes suivantes pour ajouter un document à votre collection.

Step 1 - Ajouter une nouvelle collection Familles de niveau tarifaire S1 dans myfirstdb.

Step 2 - Sélectionnez la collection Familles et cliquez sur l'option Créer un document pour ouvrir le panneau Nouveau document.

Ceci est juste un simple éditeur de texte qui vous permet de taper n'importe quel JSON pour un nouveau document.

Step 3 - Comme il s'agit de saisie de données brutes, entrons dans notre premier document.

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

Lorsque vous entrez le document ci-dessus, vous verrez l'écran suivant.

Notez que nous avons fourni un identifiant pour le document. La valeur id est toujours requise et doit être unique dans tous les autres documents de la même collection. Lorsque vous le laissez de côté, DocumentDB en génère automatiquement un pour vous à l'aide d'un GUID ou d'un identifiant global unique.

L'identifiant est toujours une chaîne et il ne peut pas s'agir d'un nombre, d'une date, d'un booléen ou d'un autre objet, et il ne peut pas comporter plus de 255 caractères.

Notez également la structure hiérarchique du document qui a quelques propriétés de premier niveau comme l'id requis, ainsi que lastName et isRegistered, mais il a également des propriétés imbriquées.

Par exemple, la propriété parents est fournie sous forme de tableau JSON comme indiqué par les crochets. Nous avons également un autre tableau pour les enfants, même s'il n'y a qu'un seul enfant dans le tableau dans cet exemple.

Step 4 - Cliquez sur le bouton «Enregistrer» pour enregistrer le document et nous avons créé notre premier document.

Comme vous pouvez le voir, une jolie mise en forme a été appliquée à notre JSON, qui divise chaque propriété sur sa propre ligne en retrait avec un espace pour indiquer le niveau d'imbrication de chaque propriété.

Le portail comprend un explorateur de documents, alors utilisons-le maintenant pour récupérer le document que nous venons de créer.

Step 5- Choisissez une base de données et n'importe quelle collection dans la base de données pour afficher les documents de cette collection. Nous n'avons actuellement qu'une seule base de données nommée myfirstdb avec une collection appelée Families, qui ont toutes deux été présélectionnées ici dans les listes déroulantes.

Par défaut, l'Explorateur de documents affiche une liste non filtrée de documents dans la collection, mais vous pouvez également rechercher n'importe quel document spécifique par ID ou plusieurs documents en fonction d'une recherche générique d'un ID partiel.

Nous n'avons qu'un seul document dans notre collection à ce jour, et nous voyons son identifiant sur l'écran suivant, AndersonFamily.

Step 6 - Cliquez sur l'ID pour afficher le document.

Création de documents avec le SDK .NET

Comme vous savez que les documents ne sont qu'un autre type de ressource et que vous vous êtes déjà familiarisé avec la façon de traiter les ressources à l'aide du SDK.

  • La seule grande différence entre les documents et les autres ressources est que, bien sûr, ils sont sans schéma.

  • Il existe donc de nombreuses options. Naturellement, vous pouvez simplement travailler des graphiques d'objets JSON ou même des chaînes brutes de texte JSON, mais vous pouvez également utiliser des objets dynamiques qui vous permettent de vous lier à des propriétés au moment de l'exécution sans définir de classe au moment de la compilation.

  • Vous pouvez également travailler avec de vrais objets C #, ou Entités comme ils sont appelés, qui peuvent être vos classes de domaine métier.

Commençons par créer des documents à l'aide du SDK .Net. Voici les étapes.

Step 1 - Instanciez DocumentClient puis nous interrogerons la base de données myfirstdb, puis nous interrogerons la collection MyCollection, que nous stockons dans cette collection de variables privées afin qu'elle soit accessible dans toute 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 - Créez des documents dans la tâche 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(); 
}

Le premier document sera généré à partir de cet objet dynamique. Cela peut ressembler à JSON, mais bien sûr ce n'est pas le cas. C'est du code C # et nous créons un véritable objet .NET, mais il n'y a pas de définition de classe. Au lieu de cela, les propriétés sont déduites de la façon dont l'objet est initialisé.

Notez que nous n'avons pas fourni de propriété Id pour ce document.

Jetons maintenant un œil à CreateDocument. Cela ressemble au même modèle que nous avons vu pour la création de bases de données et de collections.

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- Cette fois, nous appelons CreateDocumentAsync en spécifiant le SelfLink de la collection à laquelle nous voulons ajouter le document. Nous obtenons une réponse avec une propriété de ressource qui, dans ce cas, représente le nouveau document avec ses propriétés générées par le système.

L'objet Document est une classe définie dans le SDK qui hérite de la ressource et possède donc toutes les propriétés de ressource communes, mais il inclut également les propriétés dynamiques qui définissent le document sans schéma lui-même.

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

Lorsque le code ci-dessus est compilé et exécuté, vous recevrez la sortie suivante.

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

Comme vous pouvez le voir, nous n'avons pas fourni d'identifiant, mais DocumentDB a généré celui-ci pour nous pour le nouveau document.