MongoDB ordena resultados de consulta com sort e pagina com limit e skip — encadeados em um cursor find. Juntos, eles tratam ordenação e retornam páginas de dados, essencial para exibir resultados.
MongoDB ordena resultados de consulta com sort e pagina com limit e skip — encadeados em um cursor find. Juntos, eles tratam ordenação e retornam páginas de dados, essencial para exibir 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 recebe um documento de campo:direção (1 ascendente, -1 descendente). Múltiplos campos fornecem 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) retorna no máximo n documentos; skip(m) pula os primeiros m. Juntos implementam paginação por offset (página N via 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);
Sem sort, a ordem dos documentos não é garantida, portanto páginas paginadas podem ser inconsistentes. Sempre ordene por um campo estável (como _id) ao 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.
Ordenação e paginação são fundamentais para exibir dados de forma útil no MongoDB — ordenar resultados e retornar páginas gerenciáveis são necessidades quase universais (qualquer lista, feed ou tabela em uma aplicação), portanto entendê-las é conhecimento essencial do dia a dia.
Saber usar sort (ordenar por campos com 1/-1, com desempate) e limit/skip (para paginação por offset — retornar páginas de dados) cobre as necessidades comuns para apresentar resultados de consulta.
Dois pontos práticos são particularmente importantes: sempre ordene ao paginar (sem isso, a ordem dos documentos não é garantida, causando páginas inconsistentes que se sobrepõem ou pulam documentos — um bug real, o mesmo problema que em SQL), e compreender que skip é lento em páginas profundas (deve percorrer e pular todos os documentos anteriores) — portanto paginação baseada em intervalo (cursor) (usando o último _id visto para buscar a próxima página, aproveitando o índice sem pular) é muito mais eficiente para grandes conjuntos de dados, uma técnica de desempenho valiosa.
Saber que ordenação em campos indexados é eficiente enquanto classificações grandes não indexadas podem ser lentas ou falhar (limites de classificação em memória) também é importante — indexe campos pelos quais você ordena.
Como ordenação e paginação são necessárias para praticamente qualquer exibição de dados, e como o requisito de consistência (ordenar para paginação estável) e considerações de desempenho (skip vs paginação baseada em intervalo, classificações indexadas) afetam diretamente a correção e a velocidade, compreender ordenação e paginação do MongoDB — sort, paginação por offset com skip/limit, requisito de ordenação estável, alternativa eficiente baseada em intervalo e indexação de campos de ordenação — é conhecimento essencial e frequentemente aplicado para construir aplicações que apresentam dados do MongoDB de forma eficaz e performática.