🛢️Parcours Fioul GroupéMongoDB · Chapitre 09
Accueil › MongoDB › Chapitre 09
Chapitre 09 / 17

Le curseur & exercices

find() ne renvoie pas directement les documents mais un curseur : un objet sur lequel on enchaîne des méthodes (sort, limit, skip…). Ce chapitre fait aussi le point avec des exercices de synthèse sur les chapitres 1 à 8.

1 Notion

Qu'est-ce qu'un curseur ?

Un curseur est un pointeur vers le résultat d'une requête. MongoDB ne charge pas tout d'un coup : il fournit les documents au fur et à mesure. Dans mongosh, le curseur affiche les premiers résultats et propose « it » pour la suite.

À retenir — les méthodes sort, limit, skip s'appliquent sur le curseur, avant que les documents ne soient réellement renvoyés. Elles se chaînent.
2 Méthode

sort() — trier

1 = croissant, -1 = décroissant. On peut trier sur plusieurs champs.

db.clients.find().sort({ points: -1 })                 // + de points d'abord
db.clients.find().sort({ ville: 1, points: -1 })    // ville A→Z, puis points
3 Méthode

limit() & skip() — paginer

limit(n) borne le nombre de résultats ; skip(n) en saute. Ensemble, ils réalisent la pagination.

// top 3
db.clients.find().sort({ points: -1 }).limit(3)

// page 2, 10 par page
db.clients.find().skip(10).limit(10)
Ordre logique — quel que soit l'ordre d'écriture, MongoDB applique sort → skip → limit.
4 Méthode

countDocuments() & distinct()

countDocuments(filtre) compte les documents correspondants ; distinct(champ) liste les valeurs uniques d'un champ.

db.campagnes.countDocuments({ statut: "OUVERTE" })   // combien de campagnes ouvertes
db.clients.distinct("ville")                        // liste des villes distinctes
5 Pratique

Tout enchaîner

Filtre + projection + tri + pagination dans une seule requête :

db.campagnes.find(
  { statut: "OUVERTE" },              // filtre
  { zone: 1, dateLimite: 1, _id: 0 } // projection
).sort({ dateLimite: 1 }).limit(5)   // 5 plus urgentes
6 Exercices

Exercices de synthèse (ch. 1 → 8)

Sur ta base fioul (avec quelques campagnes et fournisseurs), écris les requêtes suivantes :

🛢️ Sur le projet Fioul Groupé

Ces requêtes préfigurent les fonctionnalités de l'appli : liste triée des campagnes urgentes, pagination de la liste, statistiques par statut. Garde-les dans un playground VS Code : elles serviront de spécification quand tu écriras l'API.

Ce qu'il faut retenir du chapitre
  • find() renvoie un curseur ; on y chaîne sort, skip, limit.
  • Ordre appliqué : sort → skip → limit.
  • countDocuments() compte ; distinct() liste les valeurs uniques.
← Chapitre 08