Categories: Articles tech

Nodejs et MongoDB : comment utiliser MongoDB sur une application Node ?

MongoDB est l’éditeur dominant dans le segment des bases de données orientées documents, voir même dans tout le segment des bases NoSQL. Découvre comment utiliser MongoDB sur une app NodeJS

MongoDB est l’éditeur dominant dans le segment des bases de données orientées documents, voir dans tout le segment des bases NoSQL. Sa simplicité d’utilisation, sa flexibilité et sa large adoption en ont fait la technologie base de données la plus adoptée pour les nouveaux projets qui n’ont pas une raison évidente pour partir sur une base de données SQL. Pour les applications nodejs mongodb est l’outil parfait pour du prototypage.

{  "_id":"5beca8f00000000000000000",  "name": "Rayed",  "contacts": {    "tel":"+123456789",    "email":"rayed@email.com"  },  "status":"en poste"}

Dans une base mongoDB, vos données sont stockées sous forme d’objets JSON. Dans la majorité des cas, l’ensemble des données liées à cet objet se trouvent dans un seul document, contrairement aux bases SQL où il faut faire des jointures sur différentes tables afin d’assembler un document.

🧑‍🎓 Vous souhaitez apprendre à utiliser NodeJS 📖 ?
Practical Node vous enseigne les bonnes pratiques NodeJS pour être opérationnel dès le premier jour !

Node.js-MongoDB: connecter votre app à la base Mongo

Pour utiliser MongoDB, vous pouvez l’installer sur votre machine ou utiliser une image docker pour une utilisation en local. Vous pouvez également utiliser une solution cloud de Database as a Service, telle que MongoDB Atlas.

Nodejs MongoDB: Connecter votre app avec MongoClient

Connecter votre app Express à MongoDB avec mongodb

Commencez par ajouter le mongodb à votre projet en saisissant la commande npm install mongodb dans votre terminal à la racine de votre projet.

Dans votre fichier index.js (ou le fichier où vous démarrez votre serveur express), ajoutez le code suivant avant le lancement de votre serveur:

const MongoClient = require('mongodb').MongoClient;const url = 'mongodb://localhost:27017'const dbName = 'monProjetMongo';MongoClient.connect(url, function(err, client) {  console.log("Connecté à MongoDB");  const db = client.db(dbName);  client.close();});

En relançant votre application Nodejs, vous devriez voir dans votre terminal « Connecté à MongoDB » si votre connection est bien établie.

Exécuter des requêtes Mongo via votre application Node.js

Votre base de données maintenant connectée, vous pouvez créer les opérations mongoDB pour créer, lire, modifier ou effacer un document. Avec le client mongo, vous opérerez directement avec les commandes définies par MongoDB.

Voici un exemple de la création d’un document:

const createStudent = async object => {  const collection = db.collection('students');  const student = await collection.insertOne(object);  return student}const newStudent = {  name:"rayed",  status:"étudiant"}const insertStudent = await createStudent(newStudent)console.log(newStudent)

Dans cet exemple, la fonction createStudent va se charger d’insérer dans la collection Student l’objet que vous passerez en paramètre. Après avoir défini cette fonction et le nouvel étudiant que je voulais insérer, j’appelle la fonction createStudent en lui passant cet étudiant en paramètre.

Connecter votre app avec Mongoose

Contrairement à MongoClient, mongoose est une fine surcouche à MongoDB qui simplifie certaines opérations et qui impose la structure des objets via des schemas. En effet, lorsque vous manipulez MongoDB directement, vous êtes libres d’insérer n’importe quel document dans une collection. Avec Mongoose, vous définissez des Schemas qui imposent les champs que doivent contenir les objets issus de ce schema.

const studentSchema = new Schema({  email:{    type: String,    required: true,    unique: true  },  github: {    type:String,    lowercase:true  },  first_name:String})

Dans l’exemple, nous avons un schema où un objet Student pourra contenir les champs email, github et first_name. Il ne pourra pas contenir de champs absents du schema. En revanche il pourrait avoir uniquement le champ email, car lui seul est obligatoire.

Créer la connexion Nodejs MongoDB avec Mongoose

Comme pour MongoClient, installez mongoose sur votre projet via la commande npm install mongoose

Avant le lancement de votre serveur, ajoutez le code suivant:

const mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});db = mongoose.connection;db.on('error', console.error.bind(console, 'connection error:'));db.once('open', function() {  console.log("connecté à Mongoose")});

En relançant votre serveur Nodejs, vous devriez voir dans votre terminal « connecté à Mongoose » si votre connexion est bien établie. Dans le cas contraire, un message contenant l’erreur si la connexion n’a pas pu se faire.

Exécuter des requêtes avec mongoose

Contrairement à MongoClient, Mongoose vous oblige à définir vos schemas avant de manipuler vos objets. Commençons par créer un premier schema dans un fichier student.js.

const mongoose = require('mongoose');const Schema = mongoose.Schema;const studentSchema = new Schema({    firstName:  String,    lastName: String,    cursus:   String,    classes: [{ body: String, date: Date }],    enrolled: { type: Date, default: Date.now }  });const Student = mongoose.model('Student', studentSchema)module.exports = Student

Ce fichier va contenir le module Student, qui est un schema mongoose. Nous avons les propriétés qu’un student peut contenir.

Une fois ce schema défini, vous pouvez maintenant utiliser les méthodes des schemas mongoose pour réaliser nos opérations de création, modification ou suppression.

const Student = require('./student.js')// Créer un étudiantconst createStudent = async studentData => { const student = await Student.create(studentData) return student}// Récupérer un étudiantconst findStudent = async firstName => { const student = await Student.findOne({firstName}) return student}// Récupérer tous les étudiantsconst findStudents = async firstName => { const student = await Student.find({}) return student}

Vous trouverez ici la liste des queries possibles pour manipuler vos objets via mongoose.

Node MongoDB: quel client utiliser ?

Dans la plupart des cas, je vous conseille d’utiliser Mongoose pour vos projets d’application nodejs MongoDB. Cette librairie va vous permettre d’imposer une structure à vos données tout en simplifiant les requêtes.

En revanche, si vous cherchez à prototyper quelque chose ou que vous souhaitez pratiquer vos compétences MongoDB alors mongoClient vous permet d’être au plus prêt de la base de données et de manipuler les requêtes natives de mongo.

Aller plus loin:

Rayed Benbrahim

Recent Posts

Communauté Tech et féminine : Interview avec Helvira de Motiv’her

Elles sont passées où les femmes dans la tech ? Entre le manque de représentation…

1 jour ago

Consommer des APIs HTTP en PHP comme un pro avec Nicolas Grekas.

Dans cette vidéo, on interview Nicolas Grekas, contributeur clé de Symfony, pour discuter de sa…

1 jour ago

Trouver son job grâce à WeLoveDevs.

 Comment trouver son job dans la tech ? Marie a la réponse ! Grâce à…

3 jours ago

Adobe, L’empire créatif.

Adobe, l'empire créatif, et pas des moindres ! Belle ascension de la part de ces…

7 jours ago

La MAO musique ou musique assistée par ordinateur

Est-ce plus simple de créer des morceaux avec les outils de Musique Assistée par Ordinateur…

7 jours ago