DocumentDB – Actualizar documento

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

Actualizar documento

Haga clic en el botón «Guardar». Ahora, cuando necesite cambiar un documento con.Net SDK, simplemente puede reemplazarlo. No tiene que eliminarlo y volver a crearlo, lo que, además de ser tedioso, también cambiaría el ID del recurso, lo que no querría hacer cuando simplemente cambie el documento. Estos son los siguientes pasos para actualizar su documento usando.Net SDK.

Echemos un vistazo a la siguiente tarea ReplaceDocuments en la que consultaremos documentos en los que la propiedad isNew sea verdadera, pero no obtendremos nada porque no están allí. Así que cambiemos los documentos que agregamos anteriormente, aquellos cuyos nombres comienzan con Nuevo cliente.

Paso 1 РAgregue la propiedad isNew a estos documentos y establ̩zcala 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(); 
}

Paso 2 – Obtener documentos para actualizar utilizando la misma consulta de STARTSWITH que nos da los documentos que devolvemos aquí como objetos dinámicos.

Paso 3 РAdjunte la propiedad isNew y establ̩zcala en true para cada documento.

Paso 4 – Llame a ReplaceDocumentAsync pasando el SelfLink del documento junto con el documento actualizado.

Ahora, para demostrar que funcionó, solicite documentos donde isNew sea verdadero. Llamemos a las solicitudes 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, obtendrá 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 

🚫