Una base de datos puede tener miles y miles de registros, los cuales conviene consultar de forma gradual y en partes para que sea más ameno para el usuario que consume la información.
Cómo es la paginación en MongoDB
Las consultas que realices en MongoDB permiten separar los resultados en partes iguales y desarrollar en el front-end la típica lógica de paginación de resultados.
Paso 1: tipado de datos
Comienza creando un DTO para el tipado de los datos que construirán la paginación.
// products/products.dto.tsimport{IsOptional,Min}from'class-validator';exportclassFilterProductsDto{@IsOptional()@IsPositive() limit:number;// Cantidad de registros por página@IsOptional()@Min(0) offset:number;// Número de registros a ignorar}
Paso 2: aplicar "limit" y "offset" en el servicio
El servicio de lectura de los registros recibe los parámetros para crear el paginador y utilizarlos en la consulta.
Los parámetros que construyen un paginador suelen recibirse por medio de Query Params y estos deben ser opcionales. El backend tiene que contemplar valores por defecto en el caso de que el front-end no envíe nada y el endpoint debe continuar funcionando correctamente.
Paso 4: configuración de Query Params
Por defecto, todos los Query Params son del tipo String. NestJS nos ayuda a convertirlos a números enteros con la siguiente configuración en el archivo main.ts.
// src/main.tsnewValidationPipe({ transformOptions:{ enableImplicitConversion:true,// Convertir Query Params a números entero}})
De esta manera, tu endpoint del tipo GET se encuentra listo para permitirle al front-end crear un paginador y facilitar la lectura de resultados a los usuarios.
Contribución creada por: Kevin Fiorentino.
Código de ejemplo para agregar paginación
// src/products/dtos/products.dtos.tsimport{...IsOptional,// 👈 new decoratorMin,// 👈 new decorator}from'class-validator';...exportclassFilterProductsDto{// 👈 new DTO@IsOptional()@IsPositive() limit:number;@IsOptional()@Min(0) offset:number;}