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

Appliqués sur un tableau d'objet (documents)
dans cette exemple on va travailler avec le tableau categories de la collection produits:
{
  _id: 1,
  nom: 'produit1',
  prix: 65.2,
  quantite: 45,
  categories: [
    {
      _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
  ]
}

Remarque

Veuillez renomer le champs category à categories
parce que on créer le champs avec le nom category alors que on a un tableau de plusieur categories
db.produits.updateMany({},{$rename:{"category":"categories"}})

push()

Ajouter la categorie suivante à la fin du tableau categories:
{
      _id: 3,
      nom: 'category3',
      description: 'une description de la catégorie3'
    }
db.produits.updateMany({},{$push:{"categories":
{  _id: 3,
      nom: 'category3',
      description: 'une description de la catégorie3'
    }
	}})
Ajouter les categories
{"_id":4,"nom":"category4","description":"description4"}
{"_id":5,"nom":"category5","description":"description5"}
pour tout les produits
db.produits.updateMany({},{$push:{"categories":
{$each:[{"_id":4,"nom":"category4","description":"description4"},
{"_id":5,"nom":"category5","description":"description5"}]}}})

addToSet()

Permet d'ajouter une liste d'élément dans un tableau sans doublants
db.produits.updateMany({},{$addToSet:{"categories":{$each:[{"_id":4,"nom":"category4","description":"description4"},
{"_id":5,"nom":"category5","description":"description5"}]}})

Remarque

les categories _id:4 et _id:5 ne seront pas ajoutées parceque sont déja dans le tableau categories

$pop

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

tabeaux.position

On peut accéder directement à une case dans un tableau avec sa position
Modifier le nom de la deuxième categorie à "categorieX" pour tous les produits
db.produits.updateMany({},{$set:{"categories.1.nom":"categorieX"}})
Augmenter le prix de 20 pour les produits s'ils ont le nom de la 3ème categorie est categorie3
db.produits.updateMany({"categories.2.nom":"categorie3"},{$inc:{"prix":20}})

$[]

Permet de modifier toutes les cases du tabeau
Changer le nom de toutes les categories à low cost pour les produits qui le prix<5
db.produits.updateMany({"prix":{$lt:5}},{$set:{"categories.$[].nom":"Low Cost"}})
Modifier la description de toutes les categories qui ont nom="low cost" à low cost description
db.produits.updateMany(
   {  },
   { $set: { "categories.$[element].description" : "low cost description" } },
   { arrayFilters: [ { "element.nom": { $eq: 'Low Cost'} } ] }
)
Diminuer de 5 le prix de tous les produits qui ont la categorie.nom low cost
db.produits.updateMany( { "categories.nom":{$eq:'Low Cost'}}}, { $inc: { "prix":-5 }} )

Remarque

lorsque on veut vérifier la valeur d'un attribut d'un document dans un tableau de document
sans spéciser la position de ce document on accède directement au attribut :categories.nom ou categories.description
{
  _id: 2,
  nom: 'produit2',
  .....
  
  categories: [
    {
      _id: 2,
      nom: 'Low Cost',
      description: 'low cost description'
    },
    {
      _id: 2,
      nom: 'Low Cost',
      description: 'low cost description'
    }
    
  ]
}
Modifier le prix des produits à 150 pour ceux des categories nom=categorie1 ou nom=categorie2
db.produits.updateMany( { "categories.nom":{$in:["categorie1","categorie2"]} },{$set:{"prix":150}})