Utiliser MongoDB $Pull pour supprimer des documents dans un tableau
-
Opérateur MongoDB
$pull
-
Commande MongoDB
$pull
avec condition -
Utilisez
$pull
dans le tableau imbriqué
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 results
où q
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
.