DocumentDB - Actualizar documento

En este capítulo, aprenderemos cómo actualizar los documentos. Con Azure Portal, puede actualizar fácilmente el documento abriéndolo en el Explorador de documentos y actualizándolo en el editor como un archivo de texto.

Haga clic en el botón "Guardar". Ahora, cuando necesite cambiar un documento usando .Net SDK, simplemente puede reemplazarlo. No es necesario eliminarlo y volver a crearlo, lo que además de ser tedioso, también cambiaría la identificación del recurso, lo que no querría hacer cuando solo está modificando un documento. Estos son los siguientes pasos para actualizar el documento usando .Net SDK.

Echemos un vistazo a la siguiente tarea ReplaceDocuments, donde consultaremos documentos donde la propiedad isNew sea verdadera, pero no obtendremos ninguna porque no hay ninguna. Entonces, modifiquemos los documentos que agregamos anteriormente, aquellos cuyos nombres comienzan con Nuevo cliente.

Step 1 - Agregue la propiedad isNew a estos documentos y establezca su valor en verdadero.

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 - Obtener los documentos a actualizar utilizando la misma consulta INICIO CON Y eso nos da los documentos, que estamos volviendo aquí como objetos dinámicos.

Step 3 - Adjunte la propiedad isNew y configúrela como verdadera para cada documento.

Step 4 - Llame a ReplaceDocumentAsync, pasando el SelfLink del documento, junto con el documento actualizado.

Ahora, solo para demostrar que esto funcionó, consulte los documentos donde isNew es igual a verdadero. Llamemos a las consultas anteriores desde la tarea 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); 
   }
	
}

Cuando se compile y ejecute el código anterior, recibirá el siguiente resultado.

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