DocumentDB - Kayıtları Sınırlandırma

Microsoft kısa süre önce Azure DocumentDB'yi nasıl sorgulayabileceğiniz konusunda, sorguların daha hızlı çalışmasını ve daha az kaynak tüketmesini sağlayan, sorgu işleçleri için sınırları artıran ve ek LINQ operatörleri için destek ekleyen SQL dilbilgisine TOP anahtar sözcüğü gibi bir dizi iyileştirme ekledi. .NET SDK.

Sadece ilk iki kaydı alacağımız basit bir örneğe bakalım. Çok sayıda kaydınız varsa ve bunlardan yalnızca bazılarını almak istiyorsanız, o zaman Top anahtar sözcüğünü kullanabilirsiniz. Bu örnekte, çok sayıda deprem kaydımız var.

Şimdi sadece ilk iki kaydı göstermek istiyoruz

Step 1 - Sorgu gezginine gidin ve bu sorguyu çalıştırın.

SELECT * FROM c 
WHERE c.magnitude > 2.5

Henüz TOP anahtar kelimesini belirtmediğimiz için dört kaydı aldığını göreceksiniz.

Step 2- Şimdi aynı sorgu ile TOP anahtar kelimesini kullanın. Burada TOP anahtar kelimesini belirledik ve '2' sadece iki kayıt istediğimiz anlamına gelir.

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

Step 3 - Şimdi bu sorguyu çalıştırın ve sadece iki kaydın alındığını göreceksiniz.

Benzer şekilde, .Net SDK kullanarak kodda TOP anahtar kelimesini kullanabilirsiniz. Uygulama aşağıdadır.

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(); 
}

Aşağıda, DocumentClient ve deprem veritabanının somutlaştırıldığı CreateDocumentClient görevi verilmiştir.

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); 
   } 
}

Yukarıdaki kod derlendiğinde ve çalıştırıldığında, sadece üç kaydın alındığını göreceksiniz.

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