MongoDB ordina i risultati delle query con sort e gestisce la paginazione con limit e skip — concatenati su un cursore find. Insieme gestiscono l'ordinamento e la restituzione di pagine di dati, essenziali per visualizzare i risultati.
MongoDB ordina i risultati delle query con sort e gestisce la paginazione con limit e skip — concatenati su un cursore find. Insieme gestiscono l'ordinamento e la restituzione di pagine di dati, essenziali per visualizzare i risultati.
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 accetta un documento di field:direction (1 ascendente, -1 discendente). Più campi forniscono il tie-breaking.
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) restituisce al massimo n documenti; skip(m) salta i primi m. Insieme implementano paginazione offset (pagina N tramite 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);
Senza sort, l'ordine dei documenti non è garantito, quindi le pagine paginatione possono essere incoerenti. Ordina sempre per un campo stabile (come _id) quando pagini.
// ⚠️ 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.
L'ordinamento e la paginazione sono fondamentali per visualizzare i dati in modo utile in MongoDB — ordinare i risultati e restituire pagine gestibili sono esigenze quasi universali (qualsiasi lista, feed o tabella in un'applicazione), quindi comprenderli è conoscenza essenziale quotidiana.
Conoscere sort (ordinamento per campi con 1/-1, con tie-breaking) e limit/skip (per paginazione offset — restituzione di pagine di dati) copre le esigenze comuni per presentare i risultati delle query.
Due punti pratici sono particolarmente importanti: ordina sempre quando pagini (senza di ciò, l'ordine dei documenti non è garantito, causando pagine incoerenti che si sovrappongono o saltano documenti — un vero bug, lo stesso problema che in SQL), e comprendere che skip è lento su pagine profonde (deve scansionare e saltare tutti i documenti precedenti) — quindi la paginazione basata su range (cursore) (usando l'ultimo _id visto per recuperare la pagina successiva, sfruttando l'indice senza saltare) è molto più efficiente per dataset di grandi dimensioni, una tecnica di performance preziosa.
Sapere che l'ordinamento su campi indicizzati è efficiente mentre gli ordinamenti non indicizzati di grandi dimensioni possono essere lenti o non riuscire (limiti di ordinamento in memoria) è importante — indicizza i campi per cui ordini.
Poiché l'ordinamento e la paginazione sono necessari per praticamente qualsiasi visualizzazione di dati, e poiché il requisito di coerenza (ordinamento per una paginazione stabile) e le considerazioni sulle performance (skip rispetto a paginazione basata su range, ordinamenti indicizzati) influiscono direttamente sulla correttezza e la velocità, comprendere l'ordinamento e la paginazione di MongoDB — sort, paginazione offset con skip/limit, il requisito di ordinamento stabile, l'alternativa efficiente basata su range, e l'indicizzazione dei campi ordinati — è conoscenza essenziale e frequentemente applicata per costruire applicazioni che presentano i dati di MongoDB in modo efficace e performante.