Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🍃
Intermediaire 25 min MongoDB

MongoDB : guide pratique

MongoDB : guide pratique

Pourquoi MongoDB : guide pratique ?

MongoDB est une base de données NoSQL populaire utilisée pour stocker et gérer des données structurées, semi-structurées et non structurées. Dans un monde où les applications modernes nécessitent souvent d'avoir des données flexibles et scalables, MongoDB offre une solution performante et flexible.

Un cas d'usage concret : MongoDB est idéal pour le développement de plateformes e-commerce où il faut gérer une grande quantité de produits avec des attributs variés. En outre, son système de sharding permet un excellent escalade horizontal, ce qui est essentiel pour les applications grand public.

Prerequis

  • Connaissances en JavaScript
  • MongoDB installé (version 4.4 ou ultérieure)
  • Node.js et npm installés (pour des projets basés sur Node.js)

Concepts fondamentaux

Collection et Document

Une collection est similaire à une table dans une base de données relationnelle. Elle contient un ensemble de documents.

// Créer une collection
db.createCollection("tâches")

Un document est un enregistrement qui ressemble à un objet JSON avec des champs et des valeurs.

// Ajouter un document à la collection
db.tâches.insertOne({
  titre: "Écrire le tutoriel",
  description: "Créer un guide pratique sur MongoDB",
  statut: "en cours"
})

Indexation

L'indexation permet de rechercher des documents plus rapidement.

// Créer un index sur le champ 'statut'
db.tâches.createIndex({ statut: 1 })

Query et Aggregation

MongoDB offre des fonctions puissantes pour interroger et analyser les données.

// Rechercher toutes les tâches en cours
db.tâches.find({ statut: "en cours" })

// Agréger par statut
db.tâches.aggregate([
  { $group: { _id: "$statut", total: { $sum: 1 } } }
])

Mise en pratique : projet fil rouge

Mini-projet : Gestionnaire de tâches

Ce projet implémente un simple gestionnaire de tâches utilisant MongoDB et Node.js.

Étape 1 : Initialisation du projet

mkdir task-manager
cd task-manager
npm init -y

Ajoutez les dépendances nécessaires :

npm install express mongoose body-parser

Étape 2 : Configuration de MongoDB

Créez un fichier config.js pour configurer la connexion à MongoDB.

// config.js
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/task-manager', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Connected to MongoDB");
});

Étape 3 : Modèle de données

Créez un fichier models/task.js pour définir le modèle de tâche.

// models/task.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const taskSchema = new Schema({
  titre: {
    type: String,
    required: true
  },
  description: {
    type: String
  },
  statut: {
    type: String,
    enum: ['en cours', 'terminée'],
    default: 'en cours'
  }
});

module.exports = mongoose.model('Task', taskSchema);

Étape 4 : Création des routes

Créez un fichier routes/tasks.js pour définir les routes.

// routes/tasks.js
const express = require('express');
const router = express.Router();
const Task = require('../models/task');

router.get('/', async (req, res) => {
  try {
    const tasks = await Task.find({});
    res.json(tasks);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

router.post('/', async (req, res) => {
  const task = new Task({
    titre: req.body.titre,
    description: req.body.description
  });

  try {
    const newTask = await task.save();
    res.status(201).json(newTask);
  } catch (err) {
    res.status(400).json({ message: err.message });
  }
});

router.put('/:id', async (req, res) => {
  try {
    const updatedTask = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true });
    res.json(updatedTask);
  } catch (err) {
    res.status(400).json({ message: err.message });
  }
});

router.delete('/:id', async (req, res) => {
  try {
    const deletedTask = await Task.findByIdAndDelete(req.params.id);
    res.json(deletedTask);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

module.exports = router;

Étape 5 : Configuration de l'application

Ajoutez les routes à votre application principale dans app.js.

// app.js
const express = require('express');
const mongoose = require('./config');
const tasksRouter = require('./routes/tasks');

const app = express();
app.use(express.json());
app.use('/tasks', tasksRouter);

app.listen(3000, () => {
  console.log("Server running on port 3000");
});

Étape 6 : Tester l'application

Vous pouvez tester votre application en utilisant des outils comme Postman ou curl.

## Créer une tâche
curl -X POST http://localhost:3000/tasks -H "Content-Type: application/json" -d '{"titre": "Écrire le tutoriel", "description": "Créer un guide pratique sur MongoDB"}'

## Lister toutes les tâches
curl http://localhost:3000/tasks

Erreurs frequentes et debugging

1. Erreur : MongoError: not authorized for query on <collection>

// Mauvais
db.tâches.find({ statut: "en cours" })

// Correct
use task-manager
db.tâches.find({ statut: "en cours" })

2. Erreur : TypeError: Cannot read property 'length' of undefined

// Mauvais
const tasks = await Task.find({});
if (tasks.length) {
  // Code ici
}

// Correct
const tasks = await Task.find({});
if (tasks) {
  // Code ici
}

3. Erreur : ReferenceError: db is not defined

// Mauvais
db.createCollection("tâches")

// Correct
use task-manager
db.createCollection("tâches")

Pour aller plus loin

  1. Transactions : Apprenez à utiliser les transactions pour assurer la cohérence des données.

  2. Geospatial Queries : Explorer comment MongoDB peut être utilisé pour des recherches géospatiales.

  3. Sharding : Découvrez comment augmenter la performance et l'échelle de votre application avec le sharding.

Défi pratique

Créez une application de gestion de contacts qui utilise MongoDB et Node.js. Les fonctionnalités devraient inclure la création, la lecture, la mise à jour et la suppression de contacts.

Besoin d'aide sur MongoDB ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est la différence entre MongoDB et un SGBDR relationnel ?
MongoDB est un SGBDR NoSQL qui stocke les données sous forme d'objets documentaires, tandis qu'un SGBDR relationnel utilise des tables avec des relations clés. MongoDB offre une scalabilité horizontale et est idéal pour les applications nécessitant une grande flexibilité dans la modélisation de données.
Comment créer une collection en MongoDB ?
Pour créer une collection en MongoDB, vous pouvez utiliser la méthode `db.createCollection(name)` où `name` est le nom de la collection que vous souhaitez créer. Par exemple : `db.createCollection('utilisateurs')`.
Quelle commande utilise-t-on pour afficher toutes les collections d'une base de données MongoDB ?
Pour lister toutes les collections dans une base de données MongoDB, vous pouvez utiliser la commande `show collections`. Cette commande est exécutée à l'intérieur du shell MongoDB.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.