Mongoose Paginate JavaScript (Node.js) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Mongoose Paginate pour JavaScript (Node.js) : guide complet avec exemples

Bienvenue sur PythonLib ! Aujourd'hui, nous allons explorer Mongoose Paginate, l'une des bibliothèques les plus populaires pour implémenter la pagination dans les applications Node.js utilisant Mongoose ODM (Object Data Modeling) pour MongoDB.

1. Qu'est-ce que c'est et pourquoi l'utiliser ?

Mongoose Paginate est un plugin léger pour Mongoose qui ajoute la méthode paginate() à vos schémas. Il permet de diviser facilement de grands ensembles de données en pages, évitant ainsi de charger tous les documents d'un coup.

Pourquoi est-ce nécessaire ? Dans les applications réelles (blogs, sites e-commerce, API), les bases de données contiennent des milliers, voire des millions d'enregistrements. Les charger tous en même temps entraîne :

  • Une charge énorme sur le serveur (mémoire, processeur).
  • Un API lent (l'utilisateur attend la réponse pendant des minutes).
  • Une mauvaise expérience utilisateur (scroll infini sans pagination ni boutons "Suivant").

Mongoose Paginate résout ces problèmes en fournissant une implémentation de pagination prête à l'emploi, testée et flexible. Il calcule automatiquement le nombre total de documents, renvoie la page demandée et fournit des métadonnées (page actuelle, nombre total de pages, présence de page suivante/précédente).

2. Installation

L'installation se fait via npm (Node Package Manager). Assurez-vous d'avoir Node.js et npm installés.

npm install mongoose-paginate-v2

Important : Il existe deux versions de la bibliothèque :

  • mongoose-paginate — l'ancienne version, moins maintenue.
  • mongoose-paginate-v2 — la version actuelle et recommandée, avec plus de fonctionnalités et de correctifs.

Dans cet article, nous utiliserons mongoose-paginate-v2.

3. Démarrage rapide — exemple minimal fonctionnel

Créons un modèle simple "Utilisateur" et appliquons-lui la pagination.

// 1. Import des dépendances
const mongoose = require('mongoose');
const mongoosePaginate = require('mongoose-paginate-v2');

// 2. Définition du schéma
const userSchema = new mongoose.Schema({
    name: String,
    email: String,
    age: Number,
    createdAt: { type: Date, default: Date.now }
});

// 3. Ajout du plugin de pagination au schéma
userSchema.plugin(mongoosePaginate);

// 4. Création du modèle
const User = mongoose.model('User', userSchema);

// 5. Connexion à MongoDB (exemple avec une base locale)
async function main() {
    await mongoose.connect('mongodb://localhost:27017/testdb');

    // 6. Insertion de données de test (si elles n'existent pas)
    const count = await User.countDocuments();
    if (count === 0) {
        const users = [];
        for (let i = 1; i <= 50; i++) {
            users.push({ name: `Utilisateur ${i}`, email: `utilisateur${i}@exemple.com`, age: 20 + (i % 30) });
        }
        await User.insertMany(users);
        console.log('50 utilisateurs insérés');
    }

    // 7. Utilisation de la pagination
    const options = {
        page: 1,      // Numéro de page (par défaut 1)
        limit: 10,    // Nombre d'éléments par page (par défaut 10)
    };

    const result = await User.paginate({}, options);

    console.log('Résultat de la pagination :');
    console.log('Documents :', result.docs);
    console.log('Total des documents :', result.totalDocs);
    console.log('Nombre total de pages :', result.totalPages);
    console.log('Page actuelle :', result.page);
    console.log('Page suivante disponible :', result.hasNextPage);
    console.log('Page précédente disponible :', result.hasPrevPage);

    await mongoose.disconnect();
}

main().catch(console.error);

Ce code crée 50 utilisateurs, puis récupère la première page avec 10 utilisateurs. Dans la console, vous verrez non seulement les documents eux-mêmes, mais aussi les métadonnées.

Recommendations