Document Embeded :update,updateOne , UpdateMany
comment maniupler un document à l'intérieur d'un autre document
Dans note exemple on a: founisseur un document inclus dans le document de la collection produits
syntaxe
{
_id: 1,
nom: 'produit1',
prix: 65.2,
quantite: 45,
category: [
{
_id: 1,
nom: 'category1',
description: 'une description de la catégorie1'
},
{
_id: 2,
nom: 'category2',
description: 'une description de la catégorie2'
}
],
marque: 'marqueB',
moisPromotion: [
'septembre',
'juin',
'juillet'
],
fournisseur: {
_id: 1,
nom: 'fournisseur5',
tel: '0315455'
},
sizes: [
200,
200,
200,
200
]
}
updateOne()
Changer le document fournisseur du document id=1 avec le fournisseur:
_id:2
nom: 'fournisseur2',
tel: '065211'
db.produits.updateOne({"_id":1},{$set:{"fournisseur":{
_id:2,
nom: 'fournisseur2',
tel: '065211'
}}})
Modifier le champs tel en 015445 pour le fournisseur qui a _id=2
db.produits.updateOne({"fournisseur._id":2},{$set:{"fournisseur.tel":"015445"}})
updateMany()
Ajouter le champs reduction =15 pour tout les fournisseur de la marque marque1
db.produits.updateMany({"marque":"marque1"},{$set:{"fournisseur.reduction":15}})
Supprimer le champs reduction du document fournisseur pour les produits qui ont le prix <10
db.produits.updateMany({"prix":{$lt:10}},{$unset:{"founisseur.reduction":""}})
incrementer le champs reduction par 10 pour le document fournisseur si le champs sizes contient les valeur 12 et 15
db.produits.updateMany({"sizes":{$all:[12,15]}},{$inc:{"fournisseur.reduction":10}})
Supprimer les deux premières promotion pour les produits qui ont une reduction >15
db.produits.updateMan({"fournisseur.reduction":{$gt:15}},
{$unset:{
"moisPromotion.0":"",
"moisPromotion.1":""
}
}
)
augmenter les sizes par 10 pour tout les produits qui ont une reduction >10 et 3 promotion
db.produits.updateMany({$and:[{"fournisseur.reduction":{$gt:10}},{"moisPromotion":{$size:3}}]},
{
$inc:{"sizes.$[]":10}
})
ajouter les trois premières promotion avril ,mars ,juin pour les produits qui ont un fournisseur qui propose une réductioon de 15 et apparient à la marque marqueB
db.produits.updateMany({$and:[{"fournisseur.reduction":{$eq:15}},{"marque":"marqueB"}]},
{
$push:{
"moisPromotion":{
$each:["avril","mars","juin"],
$position:0
},
}
})
Modifier les trois premières promotion par septembre ,octobre ,janvier pour les produits qui ont un fournisseur qui propose une réductioon de 15 et apparient à la marque marqueB
db.produits.updateMany({$and:[{"fournisseur.reduction":{$eq:15}},{"marque":"marqueB"}]},
{
$set:{
"moisPromotion.0":"septembre",
"moisPromotion.1":"octobre",
"moisPromotion.2":"janvier",
}
})