Dans MongoDB, vous pouvez utiliser le $pop
opérateur pour supprimer le premier ou le dernier élément d'un tableau.
Utilisez $pop
en conjonction avec une méthode telle que update()
pour mettre à jour le document spécifié avec la modification.
Utilisez -1
pour supprimer le premier élément, et 1
pour supprimer le dernier.
Exemple
Supposons que nous ayons une collection appelée products
avec les documents suivants :
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Supprimer le premier élément
Nous pouvons supprimer le premier élément du tableau dans le document 1 comme ceci :
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ce message nous indique qu'un document correspond et qu'un autre (c'est-à-dire le même document) a été modifié.
Jetons un coup d'œil à la collection maintenant :
db.products.find()
Résultat :
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Nous pouvons voir que le premier élément du tableau du document 1 a été supprimé.
Supprimer le dernier élément
Supprimons maintenant le dernier élément du tableau dans le document 2 :
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Maintenant, vérifions à nouveau la collection :
db.products.find()
Résultat :
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Nous pouvons voir que le dernier élément a été supprimé du tableau dans le document 2.
Mettre à jour tous les documents
Voici un exemple qui utilise le updateMany()
méthode pour mettre à jour tous les documents :
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
Sortie :
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
Et revérifiez la collection :
db.products.find()
Résultat :
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
Alternativement, vous pouvez utiliser le update()
méthode pour mettre à jour plusieurs documents en spécifiant multi: true
.