Skip to content

Instantly share code, notes, and snippets.

@kamikaze-lab
Created February 5, 2015 22:36
Show Gist options
  • Save kamikaze-lab/388eb19dae61998e65ee to your computer and use it in GitHub Desktop.
Save kamikaze-lab/388eb19dae61998e65ee to your computer and use it in GitHub Desktop.
La mejor manera de usar skip y limit en una operación aggregate en MongoDB

Optimización del uso de skip y limit en MongoDB

Veremos la mejor manera de usar skip y limit en una operación aggregate en MongoDB

  1. Objetivo y descripción
  2. Dependencias
  3. Puesta en marcha
  4. Referencias
  5. Créditos y autor

Existen diferentes maneras a través del pipeline de aggregate de poner las operaciones de skip y limit en una consulta a una colección en MongoDB pero hay una manera óptima de juntar estas dos operaciones que no es tan evidente.

El usar estas dos operaciones es comunmente útil en paginadores de sitios administrativos o en páginas de resultados en un sitio web, esto sirve mucho en colecciones de datos enormes que no queremos desplegar de un solo golpe (ya que en muchos casos el propio sistema no aguantaría cargar todos los datos en una sola petición).

  • MongoDB - MongoDB (from "humongous") is an open-source document database, and the leading NoSQL database. Written in C++, MongoDB features:

Con un servidor de MongoDB corriendo

El uso más común es el siguiente

1.- Brincas los resultados que no quieres ver (Ejemplo: 10)

2.- Tomas solo los resultados que quieres cargar (Ejemplo: 5)

Quedando de la siguiente manera:

{ $skip: 10 },
{ $limit: 5 }

Pero este método tiene un incoveniente, ya que al brincar los 10 resultados cargamos los restantes Ejemplo: Si tuvieramos 1,000 brincamos 10 y cargamos 990 de los cuales solo usaremos 5 provacando haber cargado 985 inútilmente.

Una manera adecuada de hacerlo sería la siguiente:

1.- Sumar el número de registros que te quieres brincar más los que quieres cargar (Según nuestro ejemplo: 10 + 5)

2.- Intercambiar el orden en que usas el skip y el limit

3.- Usar el valor de la suma como el valor del limit

4.- Mantener el valor de skip ( Según nuestro ejemplo: 10 )

Quedando de la siguiente manera:

{ $limit: 15 },
{ $skip: 10 }

Si analizamos el código anterior vemos lo siguiente: Al limitar a 15 desde el paso 1 excluimos los otros 985 resultados Despúes de los 15 restantes brincamos 10 y solo nos estaremos quedando con los 5 que orginalmente queriamos tomar.

Aplicando esta técnica a tus búsquedas en mongo mejorarás dramáticamente el rendimiento de tu aplicación

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment