$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
$set sur un champ inexistant le crée. C'est normal en NoSQL : on fait évoluer la forme des documents au fil du temps.$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
$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 ».$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 } })
$rename
$rename renomme un champ. Utile pour corriger un modèle sans tout réinsérer.
db.clients.updateMany({},
{ $rename: { "ville": "commune" } })
$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 } })
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 }
}
)
À 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.
- Valeurs :
$set,$unset. - Nombres :
$inc,$mul(atomiques),$min,$max. - Champs :
$rename; dates :$currentDate. - On peut combiner plusieurs opérateurs en une mise à jour.