MongoDB ordena los resultados de consultas con sort y pagina con limit y skip — encadenados en un cursor find. Juntos manejan la ordenación y la devolución de páginas de datos, esencial para mostrar resultados.
MongoDB ordena los resultados de consultas con sort y pagina con limit y skip — encadenados en un cursor find. Juntos manejan la ordenación y la devolución de páginas de datos, esencial para mostrar resultados.
db.users.find().sort({ age: 1 }); // ascending by age (1 = asc)
db.users.find().sort({ age: -1 }); // descending (-1 = desc)
db.users.find().sort({ country: 1, name: 1 }); // by country, then name (tie-break)
db.users.find().sort({ createdAt: -1 }); // newest first (common)
sort toma un documento de campo:dirección (1 ascendente, -1 descendente). Múltiples campos proporcionan desempate.
db.users.find().sort({ name: 1 }).limit(10); // first 10 (page 1)
db.users.find().sort({ name: 1 }).skip(10).limit(10); // skip 10, take 10 (page 2)
// page N: .skip((N-1) * pageSize).limit(pageSize)
limit(n) devuelve como máximo n documentos; skip(m) salta los primeros m. Juntos implementan paginación por desplazamiento (página N mediante skip + limit).
// ❌ pagination without sort → inconsistent order (pages may overlap/skip)
db.users.find().skip(10).limit(10);
// ✅ sort by a stable field for consistent pages
db.users.find().sort({ _id: 1 }).skip(10).limit(10);
Sin sort, el orden de los documentos no está garantizado, por lo que las páginas paginadas pueden ser inconsistentes. Siempre ordena por un campo estable (como _id) al paginar.
// ⚠️ skip(1000000) must scan/skip a million docs → slow on deep pages
// ✅ range-based (cursor) pagination — far more efficient for large datasets
db.users.find({ _id: { $gt: lastSeenId } }).sort({ _id: 1 }).limit(10);
// → use the last document's _id to fetch the next page (uses the index, no skipping)
Sorting on an INDEXED field is efficient. Sorting a large result set WITHOUT an index
requires an in-memory sort (limited size — can fail/be slow for big sorts).
→ Index fields you sort by.
La clasificación y paginación son fundamentales para mostrar datos de manera útil en MongoDB — ordenar resultados y devolver páginas manejables son necesidades casi universales (cualquier lista, feed o tabla en una aplicación), por lo que comprenderlas es conocimiento esencial del día a día.
Conocer sort (ordenamiento por campos con 1/-1, con desempate) y limit/skip (para paginación por desplazamiento — devolviendo páginas de datos) cubre las necesidades comunes para presentar resultados de consultas.
Dos puntos prácticos son particularmente importantes: siempre ordena al paginar (sin él, el orden de los documentos no está garantizado, causando páginas inconsistentes que se superponen u omiten documentos — un error real, el mismo problema que en SQL), y comprender que skip es lento en páginas profundas (debe escanear y saltar todos los documentos anteriores) — por lo que la paginación basada en rango (cursor) (usando el último _id visto para obtener la siguiente página, aprovechando el índice sin saltar) es mucho más eficiente para conjuntos de datos grandes, una técnica de rendimiento valiosa.
Saber que la clasificación en campos indexados es eficiente mientras que las clasificaciones grandes sin índice pueden ser lentas o fallar (límites de ordenamiento en memoria) también es importante — indexa los campos por los que ordenas.
Puesto que la clasificación y paginación son necesarias para prácticamente cualquier visualización de datos, y puesto que el requisito de consistencia (ordenar para paginación estable) y las consideraciones de rendimiento (skip vs paginación basada en rango, ordenamientos indexados) afectan directamente la corrección y velocidad, comprender la clasificación y paginación de MongoDB — sort, paginación por desplazamiento con skip/limit, el requisito de ordenamiento estable, la alternativa eficiente basada en rango, e indexación de campos de ordenamiento — es conocimiento esencial y frecuentemente aplicado para construir aplicaciones que presenten datos de MongoDB de manera efectiva y con buen rendimiento.