MongoDB trie les résultats de requête avec sort et pagine avec limit et skip — enchaînés sur un curseur find. Ensemble, ils gèrent l'ordonnancement et le renvoi de pages de données, essentiels pour afficher les résultats.
MongoDB trie les résultats de requête avec sort et pagine avec limit et skip — enchaînés sur un curseur find. Ensemble, ils gèrent l'ordonnancement et le renvoi de pages de données, essentiels pour afficher les résultats.
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 prend un document de champ:direction (1 ascendant, -1 descendant). Plusieurs champs permettent la résolution des égalités.
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) retourne au maximum n documents ; skip(m) saute les m premiers. Ensemble, ils implémentent la pagination par décalage (page 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);
Sans sort, l'ordre des documents n'est pas garanti, donc les pages paginées peuvent être incohérentes. Triez toujours par un champ stable (comme _id) lors de la pagination.
// ⚠️ 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.
Le tri et la pagination sont fondamentaux pour afficher les données utilement dans MongoDB — l'ordonnancement des résultats et le renvoi de pages gérables sont des besoins quasi universels (toute liste, flux ou tableau dans une application), donc les comprendre est une connaissance essentielle au quotidien.
Connaître sort (ordonnancer par champs avec 1/-1, avec résolution des égalités) et limit/skip (pour la pagination par décalage — renvoi de pages de données) couvre les besoins courants pour présenter les résultats de requête.
Deux points pratiques sont particulièrement importants : toujours trier lors de la pagination (sans cela, l'ordre des documents n'est pas garanti, causant des pages incohérentes qui se chevauchent ou sautent des documents — un vrai bug, le même problème qu'en SQL), et comprendre que skip est lent sur les pages profondes (il doit analyser et sauter tous les documents précédents) — donc la pagination basée sur la plage (curseur) (utiliser le dernier _id vu pour récupérer la page suivante, exploitant l'index sans sauter) est bien plus efficace pour les grands ensembles de données, une technique de performance précieuse.
Savoir que le tri sur des champs indexés est efficace tandis que les grands tris non indexés peuvent être lents ou échouer (limites de tri en mémoire) est également important — indexez les champs sur lesquels vous triez.
Puisque le tri et la pagination sont requis pour pratiquement tout affichage de données, et puisque l'exigence de cohérence (trier pour une pagination stable) et les considérations de performance (skip vs pagination basée sur la plage, tris indexés) affectent directement la justesse et la rapidité, comprendre le tri et la pagination MongoDB — sort, pagination par décalage avec skip/limit, l'exigence de tri stable, l'alternative efficace basée sur la plage, et l'indexation des champs de tri — est une connaissance essentielle, fréquemment appliquée, pour construire des applications qui présentent les données MongoDB efficacement et performamment.