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.
Aussi dans la bibliothèque
Génération Swagger/OpenAPI pour Swift : outils et exemples de code
Event Bus et le pattern Observer en Rust : implémentation d'une architecture événementielle
Travailler avec XML en Rust : bibliothèques quick-xml, roxmltree et serde_xml_rs
ESLint + plugins TypeScript : guide complet avec exemples