🛢️Parcours Fioul GroupéMongoDB · Chapitre 06
Accueil › MongoDB › Chapitre 06
Chapitre 06 / 17

Les opérateurs de mise à jour

Au chapitre 3, on a vu $set et $inc. Voici le catalogue complet des opérateurs qui, à l'intérieur d'un updateOne/updateMany, disent comment modifier les champs.

1 Opérateur

$set et $unset

$set fixe (ou ajoute) la valeur d'un champ ; $unset supprime un champ du document.

db.campagnes.updateOne({ zone: "Ladignac-le-Long" },
  { $set:   { statut: "CLOTUREE" } })

db.campagnes.updateOne({ zone: "Ladignac-le-Long" },
  { $unset: { commentaire: "" } })   // la valeur est ignorée
À retenir — $set sur un champ inexistant le crée. C'est normal en NoSQL : on fait évoluer la forme des documents au fil du temps.
2 Opérateur

$inc et $mul

$inc ajoute une valeur (positive ou négative) ; $mul multiplie. Pratique pour des compteurs et des calculs, sans relire la valeur au préalable.

db.clients.updateMany({ ville: "Limoges" },
  { $inc: { points: 10 } })      // +10

db.produits.updateMany({},
  { $mul: { prix: 1.05 } })      // +5 % sur tous les prix
Atomicité — $inc est atomique côté serveur : pas de risque que deux mises à jour simultanées « écrasent » le compteur. À privilégier sur un « lire puis réécrire ».
3 Opérateur

$min et $max

$min ne met à jour que si la nouvelle valeur est plus petite que l'actuelle ; $max que si elle est plus grande.

// n'abaisse le prix que si 0.98 est inférieur au prix actuel
db.fournisseurs.updateOne({ _id: "total-energies" },
  { $min: { meilleurPrix: 0.98 } })
4 Opérateur

$rename

$rename renomme un champ. Utile pour corriger un modèle sans tout réinsérer.

db.clients.updateMany({},
  { $rename: { "ville": "commune" } })
Prudence — renommer un champ touche potentiellement tous les documents. À faire sur une base de test d'abord, et à versionner (script de migration).
5 Opérateur

$currentDate

$currentDate inscrit la date/heure du serveur dans un champ — idéal pour un modifieLe automatique.

db.campagnes.updateOne({ zone: "Ladignac-le-Long" },
  { $set: { statut: "CLOTUREE" },
    $currentDate: { modifieLe: true } })
6 Pratique

Combiner plusieurs opérateurs

Une même mise à jour peut enchaîner plusieurs opérateurs : ils s'appliquent tous en une opération atomique.

db.campagnes.updateOne(
  { zone: "Ladignac-le-Long" },
  {
    $set:  { statut: "OUVERTE" },
    $inc:  { nbVues: 1 },
    $currentDate: { modifieLe: true }
  }
)
🛢️ Sur le projet Fioul Groupé

À la clôture d'une campagne : passer statut à "CLOTUREE" ($set), horodater avec $currentDate, et incrémenter un compteur de campagnes clôturées côté fournisseur ($inc). Une seule opération, atomique.

Ce qu'il faut retenir du chapitre
  • Valeurs : $set, $unset.
  • Nombres : $inc, $mul (atomiques), $min, $max.
  • Champs : $rename ; dates : $currentDate.
  • On peut combiner plusieurs opérateurs en une mise à jour.
← Chapitre 05