Aide-mémoire MongoDB : Maîtriser les opérations CRUD et l'agrégation

Opérations CRUD fondamentales

Insertion de documents

Pour ajouter des données dans une collection, MongoDB propose deux méthodes principales :

// Insérer un seul document
db.inventaire.insertOne({ produit: "ordinateur", quantite: 10 });

// Insérer plusieurs documents simultanément
db.inventaire.insertMany([
  { produit: "clavier", marque: "Logitech" },
  { produit: "souris", sans_fil: true }
]);

Recherche et filtrage (Find)

La méthode find() permet d'extraire des données selon des critères spécifiques.

  • Condition unique : db.series.find({ "annee": 2022 })
  • Intersection (ET) : db.series.find({ "annee": 2022, "genre": "Drame" })
  • Union (OU) : db.series.find({ $or: [{ "annee": 2022 }, { "genre": "Action" }] })
  • Expression régulière : db.series.find({ "titre": /^The/ })

Requêtes sur les sous-documents

Il existe deux manières de filtrer des objets imbriqués :

// Recherche par notation par point (recommande pour cibler un champ précis)
db.utilisateurs.find({ "adresse.ville": "Paris" });

// Recherche par correspondance exacte de l'objet (l'ordre des champs importe)
db.utilisateurs.find({ "adresse": { ville: "Paris", code_postal: "75001" } });

Requêtes sur les tableaux

MongoDB smiplifie la recherche au sein des listes :

// Trouver les documents où le tableau 'tags' contient "promo"
db.offres.find({ tags: "promo" });

// Trouver les documents contenant soit "neuf", soit "occasion" dans le tableau
db.offres.find({ tags: { $in: ["neuf", "occasion"] } });

Projection des résultats

La projection limite les champs renvoyés par la requête pour optimiser les performances :

// Retourne uniquement le champ 'nom', exclut explicitement l'identifiant interne _id
db.clients.find({ "actif": true }, { "nom": 1, "_id": 0 });

Mise à jour (Update)

La mdoification nécessite un filtre de sélection et un opérateur de mise à jour.

// Modifier le premier document correspondant
db.stock.updateOne(
  { "item": "ecran" }, 
  { $set: { "prix": 199 } }
);

/* Opérateurs courants :
   $set : Définit la valeur d'un champ
   $unset : Supprime un champ
   $push : Ajoute un élément à un tableau
   $pull : Retire un élément d'un tableau
   $addToSet : Ajoute uniquement si l'élément n'existe pas déjà
*/

Suppression (Delete)

Pour retirer des documents ou vider une collection :

// Supprimer un seul document
db.logs.deleteOne({ "niveau": "debug" });

// Supprimer tous les documents correspondant à un critère
db.logs.deleteMany({ "expiré": true });

// Supprimer tous les documents d'une collection
db.logs.deleteMany({});

// Supprimer la collection entière (plus performant que deleteMany)
db.logs.drop();

Framework d'agrégation

Le Pipeline d'agrégation

L'agrégation traite les données via une séquence d'étapes (stages). Chaque étape transforme les documents et les passe à la suivante.

db.ma_collection.aggregate([
  { $stage1 },
  { $stage2 },
  ...
]);

Étapes courantes et équivalents SQL

Opérateur MQL Équivalent SQL Description
$match WHERE Filtre les documants d'entrée.
$group GROUP BY Regroupe les documents par une clé spécifiée.
$sort ORDER BY Trie les documents.
$project SELECT Sélectionne et transforme les champs.
$limit LIMIT Limite le nombre de résultats.

Exemple pratique d'agrégation

Calculer le chiffre d'affaires par catégorie pour les produits en stock :

db.ventes.aggregate([
  { $match: { "statut": "vendu" } },
  { $group: { 
      _id: "$categorie", 
      total: { $sum: "$prix" } 
    } 
  },
  { $sort: { total: -1 } }
]);

Astuces complémentaires

Pour vérifier l'existence d'une valeur non nulle dans un champ :

db.data.findOne({ "attribut": { $ne: null } });

Étiquettes: MongoDB NoSQL BSON Aggregation-Pipeline Database-Operations

Publié le 27 août à 13h28