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 } });