DocumentDB - Cập nhật tài liệu

Trong chương này, chúng ta sẽ học cách cập nhật các tài liệu. Sử dụng cổng Azure, bạn có thể dễ dàng cập nhật tài liệu bằng cách mở tài liệu trong Trình khám phá tài liệu và cập nhật nó trong trình chỉnh sửa như một tệp văn bản.

Nhấp vào nút 'Lưu'. Bây giờ khi bạn cần thay đổi tài liệu bằng .Net SDK, bạn chỉ cần thay thế nó. Bạn không cần phải xóa và tạo lại nó, điều này ngoài việc tẻ nhạt, cũng sẽ thay đổi id tài nguyên, điều mà bạn sẽ không muốn làm khi chỉ sửa đổi một tài liệu. Dưới đây là các bước sau để cập nhật tài liệu bằng .Net SDK.

Hãy xem tác vụ ReplaceDocuments sau đây, nơi chúng tôi sẽ truy vấn các tài liệu có thuộc tính isNew là true, nhưng chúng tôi sẽ không nhận được gì vì không có bất kỳ tài liệu nào. Vì vậy, hãy sửa đổi các tài liệu chúng tôi đã thêm trước đó, những tài liệu có tên bắt đầu bằng Khách hàng mới.

Step 1 - Thêm thuộc tính isNew vào các tài liệu này và đặt giá trị của nó thành 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 - Nhận các tài liệu được cập nhật bằng cách sử dụng cùng một truy vấn STARTSWITH và điều đó cung cấp cho chúng tôi các tài liệu mà chúng tôi đang lấy lại ở đây dưới dạng các đối tượng động.

Step 3 - Đính kèm thuộc tính isNew và đặt nó thành true cho mỗi tài liệu.

Step 4 - Gọi ReplaceDocumentAsync, chuyển vào SelfLink của tài liệu, cùng với tài liệu được cập nhật.

Bây giờ chỉ để chứng minh rằng điều này đã hiệu quả, hãy truy vấn các tài liệu trong đó isNew bằng true. Hãy gọi các truy vấn trên từ tác vụ 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); 
   }
	
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ nhận được kết quả sau.

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