DocumentDB - Mettre à jour le document

Dans ce chapitre, nous allons apprendre comment mettre à jour les documents. À l'aide du portail Azure, vous pouvez facilement mettre à jour le document en ouvrant le document dans l'Explorateur de documents et en le mettant à jour dans l'éditeur comme un fichier texte.

Cliquez sur le bouton «Enregistrer». Désormais, lorsque vous devez modifier un document à l'aide du SDK .Net, vous pouvez simplement le remplacer. Vous n'avez pas besoin de le supprimer et de le recréer, ce qui en plus d'être fastidieux, modifierait également l'ID de la ressource, ce que vous ne voudriez pas faire lorsque vous ne faites que modifier un document. Voici les étapes suivantes pour mettre à jour le document à l'aide du SDK .Net.

Jetons un coup d'œil à la tâche ReplaceDocuments suivante où nous interrogerons les documents où la propriété isNew est vraie, mais nous n'en obtiendrons aucun car il n'y en a pas. Alors, modifions les documents que nous avons ajoutés précédemment, ceux dont les noms commencent par Nouveau client.

Step 1 - Ajoutez la propriété isNew à ces documents et définissez sa valeur sur true.

private async static Task ReplaceDocuments(DocumentClient client) {

   Console.WriteLine(); 
   Console.WriteLine(">>> Replace Documents <<<"); 
   Console.WriteLine();  
   Console.WriteLine("Quering for documents with 'isNew' flag");
	
   var sql = "SELECT * FROM c WHERE c.isNew = true"; 
   var documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList();
	
   Console.WriteLine("Documents with 'isNew' flag: {0} ", documents.Count); 
   Console.WriteLine();  
   Console.WriteLine("Quering for documents to be updated"); 
	
   sql = "SELECT * FROM c WHERE STARTSWITH(c.name, 'New Customer') = true"; 
   documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList(); 
   Console.WriteLine("Found {0} documents to be updated", documents.Count); 
	
   foreach (var document in documents) {
      document.isNew = true; 
      var result = await client.ReplaceDocumentAsync(document._self, document); 
      var updatedDocument = result.Resource; 
      Console.WriteLine("Updated document 'isNew' flag: {0}", updatedDocument.isNew); 
   }
	
   Console.WriteLine();  
   Console.WriteLine("Quering for documents with 'isNew' flag");
	
   sql = "SELECT * FROM c WHERE c.isNew = true"; 
   documents = client.CreateDocumentQuery(collection.SelfLink, sql).ToList(); 
   Console.WriteLine("Documents with 'isNew' flag: {0}: ", documents.Count); 
   Console.WriteLine(); 
}

Step 2 - Obtenez les documents à mettre à jour en utilisant la même requête STARTSWITH et cela nous donne les documents, que nous récupérons ici sous forme d'objets dynamiques.

Step 3 - Attachez la propriété isNew et définissez-la sur true pour chaque document.

Step 4 - Appelez ReplaceDocumentAsync, en passant le SelfLink du document, avec le document mis à jour.

Maintenant, juste pour prouver que cela a fonctionné, recherchez les documents où isNew est égal à vrai. Appelons les requêtes ci-dessus à partir de la tâche CreateDocumentClient.

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);  
      //QueryDocumentsWithSql(client); 
      //await QueryDocumentsWithPaging(client); 
      //QueryDocumentsWithLinq(client); 
      await ReplaceDocuments(client); 
   }
	
}

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

**** Replace Documents ****  
Quering for documents with 'isNew' flag 
Documents with 'isNew' flag: 0 
Quering for documents to be updated 
Found 2 documents to be updated 
Updated document ‘isNew’ flag: True 
Updated document ‘isNew’ flag: True 
Quering for documents with 'isNew' flag 
Documents with 'isNew' flag: 2