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

Rayed Benbrahim

Publié le 2 mai 2020

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.

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 champs 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 étudiant
const createStudent = async studentData => {
 const student = await Student.create(studentData)
 return student
}

// Récupérer un étudiant
const findStudent = async firstName => {
 const student = await Student.findOne({firstName})
 return student
}

// Récupérer tous les étudiants
const 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:

Derniers articles

Dans l'univers du Big Data et du Cloud, Snowflake a vu le jour en étant le premier fournisseur d'un Data Warehouse sur le cloud 100% scalable. Dans cet article, découvrez ce qu'est un Data Warehouse et en quoi Snowflake est une solution innovante pour les entreprises.

Souvent portée par une équipe d'analystes, la QA vient supporter l'équipe tech pour assurer que les évolutions en cours de développement et récemment déployés ne viennent pas perturber l'application. Dans cet article, découvrez comment les méthodes Shift-Left et Shift-Right viennent se complémenter pour assurer un bon niveau de qualité du logiciel déployé.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton Mac et faire tourner tes premiers containers.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton PC Windows et faire tourner tes premiers containers.

Recruter un développeur passe forcément par une évaluation technique de ses compétences. Comment intégrer un test technique dans un processus d'embauche, suivant le niveau de seniorité ?

Mardi 15 Juin 2021, Vercel a dévoilé la version 11 du framework Next.js. Cette nouvelle version apporte des optimisations sur le plan des performances mais facilite également la collaboration entre développeurs et entre les différents partis prenants du projet.

Les Jobs