Utiliser les opérateurs de mise à jour
Dans cette étape, vous explorerez les puissants opérateurs de mise à jour de MongoDB qui vous permettent d'effectuer des modifications complexes de documents au-delà de simples changements de valeurs.
Commençons par créer des données d'exemple avec lesquelles travailler :
db.products.insertMany([
{
name: "Laptop",
price: 1000,
tags: ["electronics", "computer"],
stock: 50
},
{
name: "Smartphone",
price: 800,
tags: ["electronics", "mobile"],
stock: 30
}
])
MongoDB propose plusieurs opérateurs de mise à jour puissants qui vous permettent de modifier les documents de manière sophistiquée :
- Opérateur
$mul
- Multiplier des valeurs numériques
db.products.updateOne(
{ name: "Laptop" },
{ $mul: { price: 1.1 } }
)
La sortie :
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
L'opérateur $mul
multiplie la valeur d'un champ par le nombre spécifié. Dans cet exemple, nous augmentons le prix de l'ordinateur portable de 10 %.
- Opérateur
$push
- Ajouter des éléments à un tableau
db.products.updateOne(
{ name: "Smartphone" },
{ $push: { tags: "sale" } }
)
La sortie :
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
L'opérateur $push
ajoute un élément à un champ de type tableau. Ici, nous ajoutons une étiquette "sale" aux étiquettes du smartphone.
- Opérateurs
$min
et $max
- Mise à jour basée sur une comparaison
db.products.updateOne(
{ name: "Laptop" },
{
$min: { stock: 40 },
$max: { price: 1200 }
}
)
La sortie :
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 1,
upsertedCount: 0,
upsertedId: null
}
$min
met à jour le champ si la valeur spécifiée est inférieure à la valeur existante
$max
met à jour le champ si la valeur spécifiée est supérieure à la valeur existante
Vérifions nos mises à jour :
db.products.find()
[
{
_id: ObjectId('674683aebec38876f7c1c18e'),
name: 'Laptop',
price: 1200,
tags: [ 'electronics', 'computer' ],
stock: 40
},
{
_id: ObjectId('674683aebec38876f7c1c18f'),
name: 'Smartphone',
price: 800,
tags: [ 'electronics', 'mobile', 'sale' ],
stock: 30
}
]
Vous devriez voir les documents modifiés avec les prix, les étiquettes et les niveaux de stock mis à jour.