DocumentDB - Limitazione dei record

Microsoft ha recentemente aggiunto una serie di miglioramenti su come eseguire query in Azure DocumentDB, come la parola chiave TOP per la grammatica SQL, che ha reso le query più veloci e consumano meno risorse, aumentato i limiti per gli operatori di query e aggiunto il supporto per operatori LINQ aggiuntivi in .NET SDK.

Diamo un'occhiata a un semplice esempio in cui recupereremo solo i primi due record. Se si dispone di più record e si desidera recuperarne solo alcuni, è possibile utilizzare la parola chiave Top. In questo esempio, abbiamo molti record di terremoti.

Ora vogliamo mostrare solo i primi due record

Step 1 - Vai a Query Explorer ed esegui questa query.

SELECT * FROM c 
WHERE c.magnitude > 2.5

Vedrai che ha recuperato quattro record perché non abbiamo ancora specificato la parola chiave TOP.

Step 2- Ora usa la parola chiave TOP con la stessa query. Qui abbiamo specificato la parola chiave TOP e "2" significa che vogliamo solo due record.

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

Step 3 - Ora esegui questa query e vedrai che vengono recuperati solo due record.

Allo stesso modo, puoi utilizzare la parola chiave TOP nel codice utilizzando .Net SDK. Di seguito è riportata l'implementazione.

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

Di seguito è riportata l'attività CreateDocumentClient in cui vengono istanziate il database DocumentClient e il database dei terremoti.

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

Quando il codice precedente viene compilato ed eseguito, vedrai che vengono recuperati solo tre record.

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