Chapitre9 Mongoose
Chapitre9 Mongoose
Chapitre9 Mongoose
Chapitre 9: Mongoose
I. Introduction
Mongoose va servir de passerelle entre notre serveur Node.js et notre serveur MongoDB.
$> npm install mongoose
var mongoose = require('mongoose');
DSI3 Mme Gâabeb
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();
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 .
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.
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 !
DSI3 Mme Gâabeb
// Récupérer un Model
var CommentaireArticleModel = mongoose.model('commentaires');
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 !';
monCommentaire.save(function (err) {
if (err) { throw err; }
console.log('Commentaire ajouté avec succès !');
});
// Inclusion de Mongoose
var mongoose = require('mongoose');
$> node mongoose.js
Commentaire ajouté avec succès !
$>
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 » !
DSI3 Mme Gâabeb
Pour récupérer les données d'une collection il y a trois méthodes possibles : find,
findOne et findById.
CommentaireArticleModel.find(null, function (err, comms) {
if (err) { throw err; }
// comms est un tableau de hash
console.log(comms);
});
À 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('------------------------------');
}
});
CommentaireArticleModel.update({ pseudo : 'DSI'}, { pseudo : 'RSI' }, {
multi : true }, function (err) {
if (err) { throw err; }
console.log('Pseudos modifiés !');
});