Créer sa première base de données avec MongoDB

Tutoriel expliquant et montrant comment créer sa première base de données avec le site MongoDB

Il y a des technologies qui, lorsqu’on en entend parler, nous font directement penser à d’autres technologies.

Et c’est le cas lorsqu’on aborde la technologie NodeJS. Les 2 principaux termes qui reviendront souvent, et qui sont associés à ce dernier, sont: la MEAN Stack et MongoDB.

La MEAN Stack décrit un environnement complet pour développer une application utilisant MongoDB pour le stockage des données, Express et NodeJS pour la partie serveur et Angular pour la partie visuelle.

Base de données MongoDB

MongoDB est donc un type de base de données très spécifique puisqu’il repose sur le NoSQL qui est à l’opposé du modèle relationnel que l’on connait tous avec le SQL.

Pour mieux comprendre les différences, tu peux retrouver mon article sur les différentes bases de données. (J’accède à l’article)

Cet article va se concentrer sur la découverte et la mise en place de ta première base de données MongoDB. On verra aussi comment connecter cette dernière à une application NodeJS.

Avant tout chose, il existe 2 possibilités pour créer une base de données Mongo: soit on s’occupe nous-même d’héberger notre BDD sur un serveur que l’on maintient soit on passe par une solution cloud comme Atlas

Pour cet article, j’ai décidé d’utiliser la solution cloud Atlas qui n’est autre que la solution d’hébergement en ligne du site MongoDB.

Cette offre est gratuite et permet de travailler sur une BDD avec des petites performances.

Comme le site l’indique, c’est idéal pour découvrir ou pour de petites applications car la RAM n’est pas dédiée et l’espace de stockage est limité.

Image montrant l'étape 1 du processus de création d'une base de données MongoDB avec le site officiel.

Atlas MongoDB 🌍

Avant de pouvoir créer une BDD Mongo, il est nécessaire de se créer un compte sur le site.

Pour cela, on se rend directement sur le site 👉  le lien pour faire un compte

Création d’un compte

Personnellement, j’ai utilisé l’inscription via adresse Gmail pour gagner du temps.

Une fois l’adresse mail sélectionnée, il sera nécessaire d’accepter les termes:

Image montrant l'étape 2 du processus de création d'une base de données MongoDB avec le site officiel.

Une fenêtre d’inscription réussie va alors s’afficher durant quelques instants:

Image montrant l'étape 3 du processus de création d'une base de données MongoDB avec le site officiel.

La fenêtre qui suivra nous permettra de renseigner des informations globales pour notre compte.

On retrouvera notamment:

  • le nom de l’organisation (mettre son nom ou celui de son entreprise)
  • le nom du projet (on pourra en faire plusieurs sur un même compte, pas de soucis)
  • le langage préféré (JS ❤️ )
Image montrant l'étape 4 du processus de création d'une base de données MongoDB avec le site officiel.

L’étape suivante consistera à choisir son offre, évidemment, nous allons prendre l’offre gratuite:

Image montrant l'étape 5 du processus de création d'une base de données MongoDB avec le site officiel.

Il va ensuite être temps de configurer notre cluster.

Création d’un cluster

Chaque projet pourra posséder un ou plusieurs clusters. Un cluster est un groupe de serveurs qui permet de faire, notamment, de la redondance de données.

MongoDB déploiera gratuitement 3 instances répliquées, cela signifie que si l’une des instances n’est plus accessible car elle a crashé, une des 2 autres restantes prendra le relais. C’est donc un véritable gage de haute disponibilité d’application.

Cependant, il ne faut pas confondre avec une sauvegarde. La redondance de données permet d’être sûr que le service sera toujours disponible quoi qu’il puisse arriver, ou presque, car si comme OVH le bâtiment prend feu, tous les clusters seront éteints et la base de données ne sera plus accessible.

Les grosses sociétés ont donc des clusters sur des mêmes positions géographiques pour gagner du temps en cas de crash, mais aussi des clusters sur d’autres positions géographiques pour éviter les soucis qu’on eu OVH.

Le cluster représente donc le choix de la position géographique et de la capacité du serveur. Une fois déployé, pour un même projet, on pourra créer plusieurs bases de données sur le même cluster et pour un même projet.

Il n’y a pas de limite, hormis celle de la taille maximale de 5Go dans la version gratuite.

Configurons notre cluster en 4 étapes.

Dans un premier temps, on va choisir la position géographique mais aussi le service qui va héberger notre cluster.

Personnellement, j’ai choisi le service AWS d’Amazon. Pour la position géographique, je vous invite à prendre l’Irlande pour avoir un temps de latence assez faible.

Image montrant l'étape 6 du processus de création d'une base de données MongoDB avec le site officiel.

Dans un second temps, il est nécessaire de choisir la formule au niveau de la RAM, du stockage et du processeur.

On peut voir qu’en réalité, la version entièrement gratuite ne nous permet de stocker que 512Mo de données. La version 2 et 5Go étant payante.

On restera donc sur l’option par défaut.

Image montrant l'étape 7 du processus de création d'une base de données MongoDB avec le site officiel.

La troisième étape de configuration représente une option de sauvegarde.

Comme expliqué précédemment, l’utilisation d’un cluster est différente d’une sauvegarde et dans la version gratuite, il n’est malheureusement pas possible de sauvegarder automatiquement via le cloud notre base de données.

Il existera cependant des possibilités de le faire via de la programmation.

On laisse donc tout par défaut.

Image montrant l'étape 8 du processus de création d'une base de données MongoDB avec le site officiel.

Dernière étape, nous allons donner un nom à notre cluster.

Personnellement, la nomenclature que je vais utiliser est assez simple.

Je reprends le nom du service AWS, la géolocalisation IRL-EU-WEST et le fait que les ressources soit partagées SHARED.

Image montrant l'étape 9 du processus de création d'une base de données MongoDB avec le site officiel.

Et c’est tout, il n’y a plus qu’à continuer.

Nous allons être redirigé sur la page de notre projet nous indiquant que le cluster est entrain d’être déployé.

Image montrant l'étape 10 du processus de création d'une base de données MongoDB avec le site officiel.

Cela prendra quelques minutes, puis l’interface centrale affichera de nouvelles informations:

Image montrant l'étape 11 du processus de création d'une base de données MongoDB avec le site officiel.

Paramétrage d’un accès utilisateur

Notre cluster étant prêt à l’utilisation, il va être nécessaire de pouvoir se connecter à ce dernier pour récupérer les futures données stockées.

Pour cela, nous allons devoir créer un utilisateur.

Globalement, il existe 2 types d’utilisateurs:

  • celui qui peut lire et écrire
  • celui qui peut seulement lire

Nous allons créer un utilisateur avec les droits de lecture et écriture afin de pouvoir travailler convenablement.

Sur le menu de gauche, on va se rendre sur Security > Database Access:

Image montrant l'étape 12 du processus de création d'une base de données MongoDB avec le site officiel.

On va cliquer sur le bouton permettant d’ajouter un utilisateur et on va remplir la popup comme suit: (j’ai utilisé la génération automatique de mot de passe)

Image montrant l'étape 13 du processus de création d'une base de données MongoDB avec le site officiel.

On accepte et notre utilisateur devrait apparaitre sur l’interface.

Sécurisation de l’accès à la base de données

Notre utilisateur étant maintenant créer, par défaut le cluster n’est pas accessible pour des questions de sécurité !

Il va donc falloir dire au cluster que nous donnons accès à une IP précise ou bien une plage d’adresse IP ou bien tout simplement à tout le monde.

Pour des raisons de sécurité et dans la plupart des cas, on restreindra l’accès à une adresse IP précise. Ce sera souvent celle du serveur API qui se connectera ou bien celles des postes des développeurs.

Sur le menu de gauche, on va se rendre sur Security > Network Access:

Image montrant l'étape 14 du processus de création d'une base de données MongoDB avec le site officiel.

On va cliquer sur le bouton permettant d’ajouter une nouvelle adresse IP: (j’ai cliqué sur le bouton ADD CURRENT IP ADDRESS)

Image montrant l'étape 15 du processus de création d'une base de données MongoDB avec le site officiel.

On accepte et notre adresse IP devrait apparaitre sur l’interface:

Image montrant l'étape 16 du processus de création d'une base de données MongoDB avec le site officiel.

Création d’une base de données

Nous allons maintenant pouvoir créer notre première base de données ! 🎉

On retourne sur la page principale en cliquant sur Data Storage > Clusters, puis, on va pouvoir cliquer sur le bouton COLLECTIONS au niveau de notre cluster:

Image montrant l'étape 17 du processus de création d'une base de données MongoDB avec le site officiel.

Le site va nous dire qu’il n’existe pas de données pour le moment et qu’il y a deux possibilités:

  • MongoDB nous met à disposition des données pour tester
  • on crée nos propres données

Nous allons choisir la deuxième option et cliquer sur Add My Own Data:

Image montrant l'étape 18 du processus de création d'une base de données MongoDB avec le site officiel.

Dans la popup qui va s’ouvrir, nous allons pouvoir donner un nom à notre base de données et nous allons aussi pouvoir créer notre première collection (pour rappel c’est l’équivalent d’une table en SQL):

Image montrant l'étape 19 du processus de création d'une base de données MongoDB avec le site officiel.

Une fois crée, une nouvelle interface nous montrera notre base de données mais aussi les différentes collections et données que nous avons, c’est à dire, aucune pour le moment.

Image montrant l'étape 20 du processus de création d'une base de données MongoDB avec le site officiel.

Nous allons ajouter à la main une donnée que l’on pourra ensuite récupérer.

Tout à droite, nous avons un bouton INSERT DOCUMENT:

Image montrant l'étape 21 du processus de création d'une base de données MongoDB avec le site officiel.

On clique dessus et nous allons créer un document représentant un possible utilisateur.

On va remplir comme suit:

Image montrant l'étape 22 du processus de création d'une base de données MongoDB avec le site officiel.

Pour ajouter un nouveau champ, il faut se positionner sur la dernière ligne, l’affichage va ainsi montrer une croix (pour supprimer) et un + (pour ajouter):

Image montrant l'étape 23 du processus de création d'une base de données MongoDB avec le site officiel.

On clique ensuite sur Insert et notre données devraient apparaître sur l’interface:

Image montrant l'étape 24 du processus de création d'une base de données MongoDB avec le site officiel.

NodeJS & MongoDB 🤝

Nous avons maintenant fini l’installation, la configuration et la création de notre base de données.

Il est temps de se connecter à celle-ci avec un projet NodeJS.

Nous allons créer de manière très simple un rapide projet NodeJS, faire la connexion et récupérer notre utilisateur.

Création du projet

On va commencer par créer un dossier et instancier un fichier package.json.

On se positionne avec un terminal à l’endroit où l’on souhaite créer le dossier puis on exécute les commandes:

mkdir nodejs-mongodb
cd nodejs-mongodb
npm init -y

On a ensuite besoin d’installer le driver MongoDB qui nous permettra de créer la connexion et de faire des requêtes:

npm i --save mongodb

On oublie pas d’ajouter un script start dans le fichier package.json et de changer le point d’entrée index.js en server.js:

{
  "name": "nodejs-mongodb",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "start": "node .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mongodb": "^3.6.6"
  }
}

Connexion à notre cluster

Avant de nous connecter à notre cluster, il faut que l’on crée notre fichier de serveur.

touch server.js

Puis, on va pouvoir le modifier en ajoutant la connexion et on va essayer de récupérer la liste des bases de données disponibles sur le cluster.

Fichier server.js:

const { MongoClient } = require('mongodb');

const uri = "mongodb+srv://project-demo-user:3y0jJq7SDRt4IYv2@aws-irl-eu-west-shared.loxwv.mongodb.net/dbDemo?retryWrites=true&w=majority";

// On configure le client de connexion
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

// On établit la connexion
client.connect(async err => {

	// On récupère la liste des BDD
  const dbList = await client.db().admin().listDatabases();

	// On les affiche
  console.log("Databases:");
  dbList.databases.forEach(db => console.log(` - ${db.name}`));
 
	// On ferme la connexion avec Mongo
  await client.close();

});

Attention, pour configurer l’URI de connexion, il faut retourner sur Data Storage > Clusters et au niveau du cluster, on verra un bouton CONNECT:

Image montrant l'étape 25 du processus de création d'une base de données MongoDB avec le site officiel.

Dans la popup, on sélectionnera Connect your application:

Image montrant l'étape 26 du processus de création d'une base de données MongoDB avec le site officiel.

Dans la nouvelle fenêtre qui s’ouvrira, on trouvera une URI complète, quasiment prête à l’emploi !

Image montrant l'étape 27 du processus de création d'une base de données MongoDB avec le site officiel.

Il faudra ajouter le mot de passe de notre utilisateur mais aussi modifier le nom de la base de données qui est par défaut, chez eux, myFirstDatabase. (De notre côté, nous l’avons appelé dbDemo)

Il ne reste qu’à lancer le projet et vérifier le rendu:

npm start

Et, dans la console, on devrait voir apparaitre le nom des bases de données disponibles:

Databases:
- db-demo
- admin
- local

Récupération de notre utilisateur

Nous allons maintenant essayer de récupérer notre utilisateur.

Pour cela, il va falloir se positionner sur la bonne collection, puis exécuter une requête dessus.

Fichier server.js:

const { MongoClient } = require('mongodb');

const uri = "mongodb+srv://project-demo-user:3y0jJq7SDRt4IYv2@aws-irl-eu-west-shared.loxwv.mongodb.net/dbDemo?retryWrites=true&w=majority";

const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

client.connect(async err => {

	// On cible la BDD et la collection dans cette BDD
  const Users = await client.db('dbDemo').collection('users');

	// La méthode find permet de récupérer toutes les données sans critère
	// Le toArray convertit le retour de la fonction en un tableau
  const users = await Users.find().toArray();
	
	// On boucle sur chacun des éléments et on l'affiche
  users.forEach(user => console.log(`Je m'appelle ${user.firstname} ${user.lastname}`));
 
  await client.close();

});

Le résultat:

Je m'appelle Thomas CHEVALIER

Conclusion

Le fonctionnement de MongoDB est assez simple dans l’ensemble et il est surtout très intuitif lorsqu’on est très proche du monde Javascript puisque le format de données se rapproche du format JSon.

La connexion et la création d’une requête est assez simple dans cette exemple et les possibilités de MongoDB vont bien au-delà de ce que l’on a pu voir.

Le Cloud Atlas possède une prise en main rapide et facile et permet de rapidement se concentrer sur le code plutôt que sur la gestion d’un serveur une fois qu’on a pris l’habitude de travailler avec.

Enfin, nous avons utilisé dans cet article le driver Mongo mais dans des applications à destination d’utilisateurs, on préfèrera utiliser une librairie, tel que Mongoose, permettant de jouer le rôle d’ORM (librairie qui fait la liaison entre un objet dans un langage et une base de données relationnelle) qui, dans le monde NoSQL s’appelle un ODM puisqu’on ne gère pas des relations mais des documents.

Thomas C

Formateur sur des parcours DWWM & CDA, j'ai décidé d'aller plus loin en te partageant mes connaissances en vitesse supersonic 🚀 Prends ta revanche sur la vie !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Formation Développeur Web