$push,$pop,$pull,$addToSet,$pullAll,$[],$sort,$slice

ces opérateur permet de manipuler les tableaux

push()

$push ajouter un élément à la fin d'un tableau Exemple:
Ajouter à la fin du tableau moisPromotion "Avril" pour les produits dont leur prix < 100
db.produits.updateMany({"prix":{$lt:100}},{$push:{moisPromotion:"Avril"}})
Ajouter une liste de valeur à la fin d'un tableau
Ajouter la liste des mois , juin et juillet à la table moisPromotion pour tout les produits
si on donne à $push un tableau ["juin","juillet"] ,elle va créer une case contenant le tableau
db.produits.updateMany({},{$push:{"moisPromotion":["juin","juillet"]}})
retourne:
 moisPromotion: [
    'janvier',
    'mars',
    'octobre',
    'Avril',
    [
      'juin',
      'juillet'
    ]
  ]
  
Donc pour ajouter une liste de valeur dans un tableau on doit utiliser $each ou $addToSet
Ajouter la liste des mois , juin et juillet à la table moisPromotion pour tout les produits
db.produits.updateMany({},{$push:{"moisPromotion":{$each:["juin","juillet"]}}})
Résultats:

 moisPromotion: [
    'janvier',
    'mars',
    'octobre',
    'Avril',
    'juin',
    'juillet'
  ],

addToSet()

Permet d'ajouter une liste d'élément dans un tableau sans doublants
Ajouter la liste des mois , juin , juillet et fervier à la table moisPromotion pour tout les produits
db.produits.updateMany({},{$addToSet:{"moisPromotion":{$each:["juin","juillet","fevrier"]}})
Résultats:
 moisPromotion: [
    'janvier',
    'mars',
    'octobre',
    'Avril',
    'juin',
    'juillet',
    'fevrier'
  ]
Seulement l'élément Fevrier qui est ajouté à la fin du tableau

$pop

Permet de supprimer le premier ou le dernier élément dans dans un tableau
Supprimer la dernière pomotion Ajoutée pour les produits dont leur prix <10 ou la marque =MarqueB
db.produits.updateMany({$or:[{"prix":{$lt:10}},{"marque":"marqueB"}]},{$pop:{"moisPromotion":1}})
Supprimer la première promotion dans le tableau moisPromotion pour tout les produits
db.produits.updateMany({},{$pop:{"moisPromotion":-1}})

tabeaux.position

On peut accéder directement à une case dans un tableau avec sa position
Modifier la deuxième promotion à septembre pour tous les produits
db.produits.updateMany({},{$set:{"moisPromotion.1":"septembre"}})
Augmenter le prix de 20 pour les produits s'ils ont la promotion du mois octobre en 3ème positions
db.produits.updateMany({"moisPromotion.2":"octobre"},{$inc:{"prix":20}})

$[]

Permet de modifier toutes les cases du tabeau
afin de tester sur tableau de réel ajouter l'attribut :"sizes":[10,50,12,15] dans la collection produits pour tous le documents
db.produits.updateMany({},{$set:{"sizes":[10,50,12,15]}})
Augmenter de 5 les sizes des produits qui ont la promotion janvier
db.produits.updateMany({"moisPromotion":{$elemMatch:{$eq:"janvier"}}},{$inc:{"sizes.$[]":5}})
Diminuer de 5 le prix de tous les produits qui ont le size 15
db.produits.updateMany({"sizes":{$elemMatch:{$eq:15}}},{$inc:{"prix":-5}})
Modifier les valeurs du tableau sizes à 20 pour les produits qui ont dans le tableau sizes une des valeurs suivantes [15,20]
db.produits.updateMany({"sizes":{$in:[15,20]}},{$set:{"sizes.$[]":20}})

$pull

Permet de supprimer une liste d'élements dans un tableau
Supprimer les promotions janvier et mars de tous les produits qui ont le prix>10
db.produits.updateMany({"prix":{$gt:10}},{$pull:{"moisPromotion":{$in:["janvier","mars"]}}})

$pullAll

Permet de supprimer une liste d'élement from un tableau

Exemple:
Supprimer les promotions janvier et mars de tous les produits qui ont le prix>10
db.produits.updateMany({"prix":{$gt:10}},{$pullAll:{"moisPromotion":["janvier","mars"]}})

$position

permet d'insérer ou modifier la une ou plusieurs cases d'un tabeau à partir d'un position données
Exemple:
insérer les promotions suivantes :, janvier , mars, avril à partir de la position 2 , pour le produits du fournisseur nom=founisseur1
db.produits.updateMany({"founrisseur.nom":"founisseur1"},{
$push:{
	"moisPromotion":{
			$each:["janvier","mars","avril"],
			$position:2
                 }
}})

arrayFilters

Permet d'appliquer des filters (conditions) sur les éléments du tableau
augmenter de 100 toutes les valeurs du tableau sizes qui sont >10
Le problème:comment changer seulement l'élement qui repond au condition
db.produits.updateMany({"sizes":{$elemMatch:{$gt:20}}},{$inc:{cette éléments .... }})

La solution est d'utiliser l'opérateur arrayFilters
db.produits.updateMany(
   {  },
   { $inc: { "sizes.$[element]" : 100 } },
   { arrayFilters: [ { "element": { $gte: 10 } } ] }
)
si element >10 {"element":{$gt:10}}
alors on applique sur cette élement :
{$inc:{"sizes.$[element]":100}}

$slice

$sort

Exemples

  • 41Comment puis-je ajouter le mois de promotion "avril" au produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $push pour ajouter le mois de promotion au produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: "avril" } })
  • 42Comment puis-je supprimer le dernier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le dernier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: 1 } })
  • 43Comment puis-je supprimer tous les mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer tous les mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: -1 } })
  • 44Comment puis-je ajouter la catégorie "category3" au produit "produit1" s'il n'a pas déjà cette catégorie ?
    Réponse: Utilisez updateOne() avec l'opérateur $addToSet pour ajouter la catégorie au produit "produit1" s'il ne l'a pas déjà :
    db.produits.updateOne({ nom: "produit1", categories: { $not: { $elemMatch: { nom: "category3" } } } }, { $addToSet: { categories: { _id: 3, nom: "category3", description: "une description de la catégorie3" } } })
  • 45Comment puis-je supprimer les catégories "category1" et "category2" du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pull pour supprimer les catégories du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pull: { categories: { nom: { $in: ["category1", "category2"] } } } })
  • 46Comment puis-je mettre à jour le nom de la catégorie "category1" du produit "produit1" en "categoryOne" ?
    Réponse: Utilisez updateOne() avec l'opérateur $[] pour mettre à jour le nom de la catégorie "category1" du produit "produit1" en "categoryOne" :
    db.produits.updateOne({ nom: "produit1", "categories.nom": "category1" }, { $set: { "categories.$.nom": "categoryOne" } })
  • 47Comment puis-je trier les mois de promotion du produit "produit1" par ordre alphabétique ?
    Réponse: Utilisez updateOne() avec l'opérateur $sort pour trier les mois de promotion par ordre alphabétique :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: [], $sort: 1 } } })
  • 48Comment puis-je conserver seulement les deux premiers mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $slice pour conserver seulement les deux premiers mois de promotion :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: [], $slice: 2 } } })
  • 49Comment puis-je supprimer complètement les mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $unset pour supprimer complètement les mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $unset: { moisPromotions: "" } })
  • 50Comment puis-je ajouter plusieurs mois de promotion (par exemple, "juin" et "juillet") au produit "produit1" en une seule opération ?
    Réponse: Utilisez updateOne() avec l'opérateur $push pour ajouter plusieurs mois de promotion en une seule opération :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: ["juin", "juillet"] } } })
    
    
    
  • 51Comment puis-je supprimer le dernier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le dernier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: 1 } })
  • 52Comment puis-je ajouter un mois de promotion "août" au produit "produit1" s'il n'est pas déjà présent ?
    Réponse: Utilisez updateOne() avec l'opérateur $addToSet pour ajouter le mois de promotion "août" au produit "produit1" s'il n'est pas déjà présent :
    db.produits.updateOne({ nom: "produit1", moisPromotions: { $ne: "août" } }, { $addToSet: { moisPromotions: "août" } })
  • 53Comment puis-je supprimer la première catégorie du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop et une valeur de -1 pour supprimer la première catégorie du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { categories: -1 } })
  • 54Comment puis-je mettre à jour la description de la catégorie "category2" du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $[] pour mettre à jour la description de la catégorie "category2" du produit "produit1" :
    db.produits.updateOne({ nom: "produit1", "categories.nom": "category2" }, { $set: { "categories.$.description": "nouvelle description de la catégorie2" } })
  • 55Comment puis-je trier les catégories du produit "produit1" par ordre alphabétique ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste triée pour réorganiser les catégories par ordre alphabétique :
    db.produits.updateOne({ nom: "produit1" }, { $push: { categories: { $each: [], $sort: 1 } } })
  • 56Comment puis-je conserver seulement les deux premières catégories du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste tronquée pour conserver seulement les deux premières catégories :
    db.produits.updateOne({ nom: "produit1" }, { $push: { categories: { $each: [], $slice: 2 } } })
  • 57Comment puis-je supprimer complètement les catégories du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $unset pour supprimer complètement les catégories du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $unset: { categories: "" } })
  • 58Comment puis-je ajouter plusieurs mois de promotion (par exemple, "septembre" et "octobre") au produit "produit1" en une seule opération ?
    Réponse: Utilisez updateOne() avec l'opérateur $push pour ajouter plusieurs mois de promotion en une seule opération :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: ["septembre", "octobre"] } } })
  • 59Comment puis-je supprimer le premier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le premier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: -1 } })
  • 60Comment puis-je ajouter un mois de promotion "novembre" au produit "produit1" s'il n'est pas déjà présent ?
    Réponse: Utilisez updateOne() avec l'opérateur $addToSet pour ajouter le mois de promotion "novembre" au produit "produit1" s'il n'est pas déjà présent :
    db.produits.updateOne({ nom: "produit1", moisPromotions: { $ne: "novembre" } }, { $addToSet: { moisPromotions: "novembre" } })
  • 61Comment puis-je supprimer la dernière catégorie du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer la dernière catégorie du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { categories: 1 } })
  • 62Comment puis-je ajouter une nouvelle catégorie "category3" au produit "produit1" s'il n'a pas déjà cette catégorie, et trier les catégories par ordre alphabétique ?
    Réponse: Utilisez updateOne() avec les opérateurs $addToSet et $push pour ajouter la nouvelle catégorie "category3" au produit "produit1" s'il n'a pas déjà cette catégorie, et triez les catégories par ordre alphabétique :
    db.produits.updateOne({ nom: "produit1", categories: { $not: { $elemMatch: { nom: "category3" } } } }, { $addToSet: { categories: { _id: 3, nom: "category3", description: "une description de la catégorie3" } }, $push: { categories: { $each: [], $sort: 1 } } })
  • 63Comment puis-je supprimer toutes les catégories sauf la première du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop et une valeur négative pour supprimer toutes les catégories sauf la première du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { categories: -1 } })
  • 64Comment puis-je mettre à jour la description de toutes les catégories du produit "produit1" pour qu'elles aient la même description "Nouvelle description commune" ?
    Réponse: Utilisez updateOne() avec l'opérateur $[] pour mettre à jour la description de toutes les catégories du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $set: { "categories.$[].description": "Nouvelle description commune" } })
  • 65Comment puis-je trier les mois de promotion du produit "produit1" par ordre décroissant ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste triée en ordre décroissant pour trier les mois de promotion :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: [], $sort: -1 } } })
  • 66Comment puis-je conserver seulement les trois premiers mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste tronquée pour conserver seulement les trois premiers mois de promotion :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: [], $slice: 3 } } })
  • 67Comment puis-je supprimer complètement les mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $unset pour supprimer complètement les mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $unset: { moisPromotions: "" } })
  • 68Comment puis-je ajouter plusieurs mois de promotion (par exemple, "décembre" et "janvier") au produit "produit1" en une seule opération ?
    Réponse: Utilisez updateOne() avec l'opérateur $push pour ajouter plusieurs mois de promotion en une seule opération :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: ["décembre", "janvier"] } } })
  • 69Comment puis-je supprimer le premier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le premier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: -1 } })
    
    
    
  • 71Comment puis-je supprimer le dernier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le dernier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: 1 } })
  • 72Comment puis-je ajouter un mois de promotion "avril" au produit "produit1" s'il n'est pas déjà présent ?
    Réponse: Utilisez updateOne() avec l'opérateur $addToSet pour ajouter le mois de promotion "avril" au produit "produit1" s'il n'est pas déjà présent :
    db.produits.updateOne({ nom: "produit1", moisPromotions: { $ne: "avril" } }, { $addToSet: { moisPromotions: "avril" } })
  • 73Comment puis-je supprimer toutes les catégories sauf la première du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop et une valeur négative pour supprimer toutes les catégories sauf la première du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { categories: -1 } })
  • 74Comment puis-je mettre à jour la description de toutes les catégories du produit "produit1" pour qu'elles aient la même description "Nouvelle description commune" ?
    Réponse: Utilisez updateOne() avec l'opérateur $[] pour mettre à jour la description de toutes les catégories du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $set: { "categories.$[].description": "Nouvelle description commune" } })
  • 75Comment puis-je trier les catégories du produit "produit1" par ordre alphabétique ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste triée pour réorganiser les catégories par ordre alphabétique :
    db.produits.updateOne({ nom: "produit1" }, { $push: { categories: { $each: [], $sort: 1 } } })
  • 76Comment puis-je conserver seulement les trois premières catégories du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $push et l'opérateur $each avec une liste tronquée pour conserver seulement les trois premières catégories :
    db.produits.updateOne({ nom: "produit1" }, { $push: { categories: { $each: [], $slice: 3 } } })
  • 77Comment puis-je supprimer complètement les catégories du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $unset pour supprimer complètement les catégories du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $unset: { categories: "" } })
  • 78Comment puis-je ajouter plusieurs mois de promotion (par exemple, "février" et "mars") au produit "produit1" en une seule opération ?
    Réponse: Utilisez updateOne() avec l'opérateur $push pour ajouter plusieurs mois de promotion en une seule opération :
    db.produits.updateOne({ nom: "produit1" }, { $push: { moisPromotions: { $each: ["février", "mars"] } } })
  • 79Comment puis-je supprimer le premier mois de promotion du produit "produit1" ?
    Réponse: Utilisez updateOne() avec l'opérateur $pop pour supprimer le premier mois de promotion du produit "produit1" :
    db.produits.updateOne({ nom: "produit1" }, { $pop: { moisPromotions: -1 } })
  • 80Comment puis-je ajouter un mois de promotion "avril" au produit "produit1" s'il n'est pas déjà présent ?
    Réponse: Utilisez updateOne() avec l'opérateur $addToSet pour ajouter le mois de promotion "avril" au produit "produit1" s'il n'est pas déjà présent :
    db.produits.updateOne({ nom: "produit1", moisPromotions: { $ne: "avril" } }, { $addToSet: { moisPromotions: "avril" } })