DocumentDB - Hồ sơ giới hạn

Microsoft gần đây đã thêm một số cải tiến về cách bạn có thể truy vấn Azure DocumentDB, chẳng hạn như từ khóa TOP đối với ngữ pháp SQL, làm cho các truy vấn chạy nhanh hơn và tiêu thụ ít tài nguyên hơn, tăng giới hạn cho toán tử truy vấn và thêm hỗ trợ cho các toán tử LINQ bổ sung trong .NET SDK.

Hãy xem một ví dụ đơn giản, trong đó chúng ta sẽ chỉ lấy hai bản ghi đầu tiên. Nếu bạn có một số bản ghi và bạn chỉ muốn truy xuất một số bản ghi, thì bạn có thể sử dụng từ khóa Top. Trong ví dụ này, chúng ta có rất nhiều hồ sơ về động đất.

Bây giờ chúng tôi chỉ muốn hiển thị hai bản ghi đầu tiên

Step 1 - Đi tới trình khám phá truy vấn và chạy truy vấn này.

SELECT * FROM c 
WHERE c.magnitude > 2.5

Bạn sẽ thấy rằng nó đã truy xuất bốn bản ghi vì chúng tôi chưa chỉ định từ khóa TOP.

Step 2- Bây giờ sử dụng từ khóa TOP với cùng một truy vấn. Ở đây chúng tôi đã chỉ định từ khóa TOP và '2' có nghĩa là chúng tôi chỉ muốn có hai bản ghi.

SELECT TOP 2 * FROM c 
WHERE c.magnitude > 2.5

Step 3 - Bây giờ chạy truy vấn này và bạn sẽ thấy rằng chỉ có hai bản ghi được truy xuất.

Tương tự, bạn có thể sử dụng từ khóa TOP trong mã sử dụng .Net SDK. Sau đây là cách thực hiện.

private async static Task QueryDocumentsWithPaging(DocumentClient client) {
   Console.WriteLine(); 
   Console.WriteLine("**** Query Documents (paged results) ****"); 
   Console.WriteLine();  
   Console.WriteLine("Quering for all documents"); 
	
   var sql = "SELECT TOP 3 * FROM c";  
   var query = client 
      .CreateDocumentQuery(collection.SelfLink, sql) 
      .AsDocumentQuery(); 
		
   while (query.HasMoreResults) {
      var documents = await query.ExecuteNextAsync(); 
		
      foreach (var document in documents) { 
         Console.WriteLine(" PublicId: {0}; Magnitude: {1};", document.publicid,
            document.magnitude); 
      } 
   } 
	
   Console.WriteLine(); 
}

Sau đây là tác vụ CreateDocumentClient trong đó khởi tạo DocumentClient và cơ sở dữ liệu động đất.

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 =
         'earthquake'").AsEnumerable().First(); 
			
      collection = client.CreateDocumentCollectionQuery(database.CollectionsLink,
         "SELECT * FROM c WHERE c.id = 'earthquakedata'").AsEnumerable().First(); 
			
      await QueryDocumentsWithPaging(client); 
   } 
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy rằng chỉ có ba bản ghi được truy xuất.

**** Query Documents (paged results) **** 
 
Quering for all documents 
PublicId: 2015p947400; Magnitude: 2.515176918; 
PublicId: 2015p947373; Magnitude: 1.506774108; 
PublicId: 2015p947329; Magnitude: 1.593394461;