DocumentDB - Limitación de registros

Microsoft ha agregado recientemente una serie de mejoras sobre cómo puede consultar Azure DocumentDB, como la palabra clave TOP en la gramática SQL, que hizo que las consultas se ejecutaran más rápido y consumieran menos recursos, aumentó los límites para los operadores de consultas y agregó soporte para operadores LINQ adicionales en el .NET SDK.

Echemos un vistazo a un ejemplo simple en el que recuperaremos solo los dos primeros registros. Si tiene varios registros y desea recuperar solo algunos de ellos, puede usar la palabra clave Top. En este ejemplo, tenemos muchos registros de terremotos.

Ahora queremos mostrar solo los dos primeros registros

Step 1 - Vaya al explorador de consultas y ejecute esta consulta.

SELECT * FROM c 
WHERE c.magnitude > 2.5

Verá que ha recuperado cuatro registros porque aún no hemos especificado la palabra clave TOP.

Step 2- Ahora use la palabra clave TOP con la misma consulta. Aquí hemos especificado la palabra clave TOP y '2' significa que solo queremos dos registros.

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

Step 3 - Ahora ejecute esta consulta y verá que solo se recuperan dos registros.

De manera similar, puede usar la palabra clave TOP en el código usando .Net SDK. A continuación se muestra la implementació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(); 
}

A continuación se muestra la tarea CreateDocumentClient en la que se crean instancias de DocumentClient y la base de datos de terremotos.

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

Cuando se compila y ejecuta el código anterior, verá que solo se recuperan tres registros.

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