Mme Gâabeb DSI3 Chapitre 9: Mongoose I. Introduction à quoi sert Mongoose ? Mo
Mme Gâabeb DSI3 Chapitre 9: Mongoose I. Introduction à quoi sert Mongoose ? Mongoose va servir de passerelle entre notre serveur Node.js et notre serveur MongoDB. Mongoose est un module Node.js qui s'installe avec NPM (Node Package Manager). Placez-vous à la racine de votre projet et faites : $> npm install mongoose Cette commande va installer le module mongoose dans le dossier node_modules/ (s'il n'existe pas il sera créé automatiquement). Comment Utiliser Mongoose dans un projet ? Vu que Mongoose utilise MongoDB, il faut au préalable avoir installé MongoDB et avoir lancé le serveur sur un terminal. Afin d'utiliser le module de Mongoose, il suffit de l'inclure comme ceci : var mongoose = require('mongoose'); Ensuite il faut préciser la quelle base de données: Mme Gâabeb DSI3 mongoose.connect('mongodb://localhost/Nom_BD', function(err) { if (err) { throw err; } console.log('Connexion Réussi'); }); Remarque : Si la base nommée de données Nom_BD n'existe pas elle sera créée automatiquement si une insertion est faite. La méthode connect() va créer un objet Connection accessible via mongoose.connection. Pour se déconnecter de MongoDB après avoir fait tous vos traitements, il faut appeler la méthode close() pour chaque connexion ouverte : // Si on a utilisé mongoose.connect() mongoose.connection.close(); II. Les schémas Mongoose utilise des « Schema » pour modéliser les données. Il permet de définir les types de variables et de structurer vos données . Pour créer un Schema avec Mongoose, il suffit d'utiliser l'objet Schema : var commentaireArticleSchema = new mongoose.Schema({ pseudo : { type : String, match: /^[a-zA-Z0-9-_]+$/ }, contenu : String, date : { type : Date, default : Date.now } }); On peut définir avec plus ou moins de précision le format de donnée que l'on attend pour chaque « champ », cela permet de sécuriser facilement les données que l'on ajoute dans la base de données. III. Les Models Maintenant que nous avons notre schéma de définition, nous allons maintenant créer un model qui va nous permettre d'insérer des données dans MongoDB en respectant le schéma précisé et d'aller faire des requêtes dessus ! Pour créer un model : Mme Gâabeb DSI3 var CommentaireArticleModel = mongoose.model('commentaires', commentaireArticleSchema); Cela va créer un model nommé « commentaires » à partir du schéma CommentaireArticleSchema et qui va le renvoyer dans la variable CommentaireArticleModel. On peut bien entendu créer le model dans un fichier .js en incluant Mongoose et en le récupérant dans un autre fichier en appelant : // Récupérer un Model var CommentaireArticleModel = mongoose.model('commentaires'); Le model va créer une collection automatiquement nommée « commentaires » (si elle n'existe pas dès qu'un élément sera inséré dedans). Le model est l'équivalent de tables en SQL). IV. Les instances de Model Pour créer une instance de Model, il suffit de faire : var monCommentaire = new CommentaireArticleModel({ pseudo : 'DSI' }); // On rajoute le contenu du commentaire, possible de le faire lors de l'instanciation monCommentaire.contenu = 'Salut DSI sur Mongoose !'; Cela va donc nous créer une instance du Model CommentaireArticleModel, cependant il n'est pas encore sauvegardé dans MongoDB, pour cela il suffit d'appeler la méthode save() de l'instance créée. monCommentaire.save(function (err) { if (err) { throw err; } console.log('Commentaire ajouté avec succès !'); }); Exemple de code (connexion, schéma, model, instance, ajout et déconnexion Exemple récapitulatif: Script mongoose.js // Inclusion de Mongoose var mongoose = require('mongoose'); // On se connecte à la base de données // N'oubliez pas d'installer mongodb, mongoose et de lancer ~/mongodb/bin/mongo dans un terminal ! mongoose.connect('mongodb://localhost/blog', function(err) { Mme Gâabeb DSI3 if (err) { throw err; } }); // Création du schéma pour les commentaires var commentaireArticleSchema = new mongoose.Schema({ pseudo : { type : String, match: /^[a-zA-Z0-9-_]+$/ }, contenu : String, date : { type : Date, default : Date.now } }); // Création du Model pour les commentaires var CommentaireArticleModel = mongoose.model('commentaires', commentaireArticleSchema); // On crée une instance du Model var monCommentaire = new CommentaireArticleModel({ pseudo : 'DSI' }); monCommentaire.contenu = 'Salut DSI sur Mongoose !'; // On le sauvegarde dans MongoDB ! monCommentaire.save(function (err) { if (err) { throw err; } console.log('Commentaire ajouté avec succès !'); // On se déconnecte de MongoDB maintenant mongoose.connection.close(); }); Exécutez le fichier avec Node.js : $> node mongoose.js Commentaire ajouté avec succès ! $> Vérifcation de l'insertion via MongoDB : Pour voir si ces données ont bien été insérées dans MongoDB, ouvrez un terminal et lancez le binaire mongo > use blog switched to db blog > show collections commentaires > db.commentaires.find() { « contenu » : « Salut DSI sur Mongoose ! », « pseudo » : « DSI », « _id » : ObjectId(« 4e995dab2ea479d40f000001?), « date » : ISODate(« 2021-17- 15T10:17:15.829Z ») } > => l' article a bien été inséré dans la collection « commentaires » dans la base « blog » ! Mme Gâabeb DSI3 Vérification de l'insertion via Mongoose: Pour récupérer les données d'une collection il y a trois méthodes possibles : find, findOne et findById. Méthode 1: find(query, [fields], [options], callback) CommentaireArticleModel.find(null, function (err, comms) { if (err) { throw err; } // comms est un tableau de hash console.log(comms); }); Ici on donne null comme query, donc Mongoose va aller chercher toutes les entrées de la collection « commentaires », ce sont les même requêtes qu'avec la fonction find() de MongoDB. Pour n'avoir accès qu'aux commentaires fait par 'DSI ': find({ pseudo : ‘DSI' }) À noter que ces méthodes renvoient un objet Query. Il faudra appeler la méthode exec( ) de cet objet Query afin de l'exécuter et de récupérer les résultats : // Ici on va récupérer les 3 premiers commentaires ayant le pseudo DSI var query = CommentaireArticleModel.find(null); query.where('pseudo', 'DSI'); query.limit(3); // peut s'écrire aussi query.where('pseudo', 'DSI').limit(3); query.exec(function (err, comms) { if (err) { throw err; } // On va parcourir le résultat et les afficher joliment var comm; for (var i = 0, l = comms.length; i < l; i++) { comm = comms[i]; console.log('------------------------------'); console.log('Pseudo : ' + comm.pseudo); console.log('Commentaire : ' + comm.contenu); console.log('Date : ' + comm.date); console.log('ID : ' + comm._id); console.log('------------------------------'); } }); V. Mise à jour avec Mongoose Mme Gâabeb DSI3 Il suffit d'appeler la méthode Model.update(conditions, update, [options], callback). Par exemple pour changer tous les pseudos des commentaires étant égal à DSI par RSI: CommentaireArticleModel.update({ pseudo : 'DSI'}, { pseudo : 'RSI' }, { multi : true }, function (err) { if (err) { throw err; } console.log('Pseudos modifiés !'); }); Si on ne précisons pas l'option { multi : true }, Mongoose ne modifiera que la première entrée qu'il trouvera. VI. Suppression des données avec Mongoose Il faut utiliser la méthode Model.remove(conditions, callback). Pour supprimer tous les commentaires ayant comme pseudo DSI : CommentaireArticleModel.remove({ pseudo : 'DSI' }, function (err) { if (err) { throw err; } console.log('Commentaires avec pseudo DSI supprimés !'); }); uploads/Ingenierie_Lourd/ chapitre9-mongoose.pdf
Documents similaires










-
28
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jul 04, 2022
- Catégorie Heavy Engineering/...
- Langue French
- Taille du fichier 0.2006MB