Utiliser MongoDB $Pull pour supprimer des documents dans un tableau

Shihab Sikder 30 janvier 2023
  1. Opérateur MongoDB $pull
  2. Commande MongoDB $pull avec condition
  3. Utilisez $pull dans le tableau imbriqué
Utiliser MongoDB $Pull pour supprimer des documents dans un tableau

L’opérateur $pull peut récupérer n’importe quel élément existant du tableau. Vous pouvez extraire un ou plusieurs éléments du tableau.

Vous pouvez supprimer n’importe quel objet spécifique du tableau imbriqué.

Opérateur MongoDB $pull

$pull est utilisé dans MongoDB pour supprimer des éléments existants du tableau. Le $pull est utilisé avec la requête update.

Voici un exemple. Nous avons inséré ce qui suit.

db.cart.insertMany( [
   {
      _id: 1,
      grocery:["biscuits", "oil", "honey", "milk", "paper"],
      electronics:["earphone", "bluetooth", "mouse", "keyboard"]
   },
   {
      _id: 2,
      grocery:["biscuits", "oil", "soda", "water", "paper"],
      electronics:["pendrive", "motherboard", "mouse", "SSD"]
   }
] )

Voici deux paniers. Disons que le magasin n’a pas de stock pour paper, SSD, ou mouse.

Vous souhaitez donc supprimer ces produits du panier. Ensuite, vous pouvez utiliser la requête suivante en utilisant l’opérateur $pull.

db.cart.updateMany({},
    {
        $pull:{ grocery: "paper",  electronics:{ $in:[ "SSD","mouse" ] } }
    }
)

L’opérateur $in prend un tableau pour faire correspondre chaque élément avec le document. Après cette opération, la collecte ressemblera à la suivante.

{
      _id: 1,
      grocery:["biscuits", "oil", "honey", "milk"],
      electronics:["earphone", "bluetooth", "keyboard"]
   },
   {
      _id: 2,
      grocery:["biscuits", "oil", "soda", "water"],
      electronics:["pendrive", "motherboard"]
   }

Commande MongoDB $pull avec condition

Supposons que nous ayons le document suivant.

{
    _id: 1,
    price: [ 31, 50, 55, 66, 98, 25 ]
},
{
    _id: 2,
    price: [ 51, 55, 65, 91, 19, 26 ]
},

Maintenant, vous voulez supprimer les éléments du tableau price avec une valeur supérieure à 50. Ensuite, la commande ressemblera à la suivante.

db.products.updateMany(
    {},
    { $pull: { price:{ $gte : 50} } }
)

Vous verrez que nous avons utilisé {} comme premier paramètre du updateMany. C’est parce que nous voulons mettre à jour tous les éléments.

Supposons que vous souhaitiez mettre à jour uniquement certains _id spécifiques, alors la commande ressemblera à ce qui suit.

db.products.updateMany(
    {_id: 1},
    { $pull: { price:{ $gte : 50} } }
)

Vous pouvez également utiliser l’opérateur $in dans le _id pour sélectionner plusieurs _id à mettre à jour et utiliser l’opération pull.

Utilisez $pull dans le tableau imbriqué

Disons que vous avez la collection de documents suivante.

db.survey.drop()

db.survey.insertMany( [
   {
      _id: 1,
      results: [
         {
            item: "A",
            score: 5,
            answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
         },
         {
            item: "B",
            score: 8,
            answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ]
         }
      ]
   },
   {
      _id: 2,
      results: [
         {
            item: "C",
            score: 8,
            answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
         },
         {
            item: "B",
            score: 4,
            answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ]
         }
      ]
   }
] )

Nous voulons supprimer ces éléments du tableau resultsq est égal à 2 et a est supérieur à 8. La requête sera alors :

db.survey.updateMany(
  { },
  {
     $pull:
        {
           results:
              {
                 answers: { $elemMatch: { q: 2, a: { $gte: 8 } } }
              }
        }
  }
)

Après cette opération, la collection mise à jour ressemblera à ceci :

{
  _id: 1,
  results: [
    {
      item: 'A',
      score: 5,
      answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
    }
  ]
},
{
  _id: 2,
  results: [
    {
      item: 'C',
      score: 8,
      answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
    }
  ]
}

Cet exemple de tableau imbriqué est tiré de la documentation officielle de MongoDB. Ici vous pouvez lire la documentation complète et en savoir plus sur l’opérateur $pull.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website