MongoDB Supprimer un élément d'un tableau
- MongoDB Supprimer un élément d’un tableau
-
Utilisez MongoDB
$pull
pour supprimer un élément d’un tableau de documents -
Utilisez MongoDB
$pullAll
pour supprimer un élément d’un tableau -
Utilisez MongoDB
$pop
pour supprimer un élément d’un tableau -
Utilisez MongoDB
$unset
pour supprimer un champ contenant l’élément donné -
Utilisez l’opérateur positionnel MongoDB pour définir l’élément sur
null
au lieu de le supprimer
Nous pouvons adopter différentes approches selon les exigences du projet. Aujourd’hui, nous allons apprendre à utiliser $pull
, $pullAll
, $pop
, $unset
et l’opérateur positionnel ($
) pour supprimer un élément d’un tableau ou d’un tableau de documents tout en travaillant. dans MongoDB.
MongoDB Supprimer un élément d’un tableau
Nous devons avoir une collection d’échantillons de documents pour pratiquer toutes les méthodes mentionnées. Nous allons créer une collection nommée collection
et insérer un seul document.
Vous pouvez également utiliser la collection
suivante contenant un document.
Exemple de code :
// MongoDB version 5.0.8
> db.collection.insertMany([
{
contact: {
phone: [
{"type" : "UAN", "number" : "123456789"},
{"type" : "office", "number" : "987546321"},
{"type" : "personal", "number" : "852147963"}
]
},
services: ["Google", "Instagram", "Twitter", "Facebook"],
scores: [ 0, 1, 8, 17, 18, 8, 20, 10 ]
},
{
contact: {
phone: [
{"type" : "UAN", "number" : "456321879"},
{"type" : "office", "number" : "874596321"},
{"type" : "personal", "number" : "964785123"}
]
},
services: ["Google", "Instagram", "Twitter"],
scores: [ 1, 8, 2, 3, 8, 7, 1 ]
}
]);
Si vous n’avez pas la collection nommée collection
, ne vous inquiétez pas ; la requête ci-dessus le créera pour vous et le remplira. Ensuite, vous pouvez exécuter db.collection.find().pretty()
pour jeter un œil au document inséré.
N’oubliez pas que vous ne verrez pas les documents mis à jour après avoir exécuté les exemples de code à venir. Pour cela, vous devez exécuter la commande db.collection.find().pretty()
.
Utilisez MongoDB $pull
pour supprimer un élément d’un tableau de documents
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{ _id : ObjectId("62aae796f27219958a489b89") },
{ $pull : { "contact.phone": { "number": "987546321" } } }
);
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "UAN", "number" : "123456789" },
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "UAN", "number" : "456321879" },
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}
Ici, nous utilisons l’opérateur $pull
pour supprimer toutes les instances d’une valeur/des valeurs d’un tableau existant qui correspond à la requête de filtre ou à la condition spécifiée.
Dans l’exemple de code ci-dessus, nous recherchons un document où le _id
est égal à ObjectId("62aae796f27219958a489b89")
. Une fois que le document correspond à la condition spécifiée, nous supprimons l’instance d’un tableau existant où le contact.phone.number
est égal à 987546321
.
Souvenez-vous des points suivants lors de l’utilisation de l’opérateur $pull
.
- Si la
value
donnée qui doit être supprimée est un tableau, alors l’opérateur$pull
supprime uniquement les éléments d’un tableau qui satisfont exactement lavalue
donnée (y compris l’ordre). - Si la
value
donnée qui doit être supprimée est un document, alors l’opérateur$pull
supprime les éléments uniquement d’un tableau contenant les champs et valeurs exacts. L’ordre des champs peut différer ici. - Si la
condition
donnée et les éléments du tableau sont des documents intégrés, alors l’opérateur$pull
appliquera lacondition
comme si chaque élément du tableau était un document dans une collection. Pour plus de détails à ce sujet, vous pouvez vérifier ceci.
Maintenant, nous avons une autre situation où nous voulons effectuer l’opération remove
sur tous les documents d’une collection. Pour ce faire, nous utilisons la syntaxe suivante en utilisant $pull
tandis que {multi: true}
opère sur tous les documents de la condition spécifiée.
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update({},
{ $pull: { "contact.phone": { "type": "UAN" } } },
{ multi: true }
);
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}
Pour obtenir la sortie ci-dessus, nous supprimons l’élément de tableau de tous les documents d’une collection où le contact.phone.type
est égal au "UAN"
.
Notre tâche suivante consiste à supprimer les éléments du tableau scores
où les valeurs sont supérieures ou égales à 2
et inférieures ou égales à 6
( 2 <= valeur <= 6
). Exécutez la requête suivante pour le faire pour tous les documents de la collection sélectionnée.
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{},
{ $pull : { scores : {$gte: 2, $lte: 6} } },
{ multi: true }
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 8, 7, 1 ]
}
Pour pratiquer avec des valeurs de type chaîne, nous pouvons le faire de la manière suivante.
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{},
{ $pull: { "services": { $in: [ "Google", "Instagram" ] }, "scores": 1 } },
{ multi: true }
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 8, 8, 7 ]
}
Pour cet exemple de code, nous utilisons l’opérateur de comparaison $in
pour avoir un tableau de valeurs et les supprimons du tableau services
si l’un d’entre eux est présent.
De plus, nous supprimons 1
du tableau scores
s’il s’y trouve pendant que nous utilisons l’opérateur $pull
pour effectuer toute cette opération de suppression.
Utilisez MongoDB $pullAll
pour supprimer un élément d’un tableau
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{ _id: ObjectId("62aae796f27219958a489b8a") },
{ $pullAll: { "scores": [8] } }
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
Pour ce code, nous utilisons l’opérateur $pullAll
pour supprimer toutes les occurrences (instances) de la valeur donnée d’un tableau déjà existant. Par exemple, si le nombre 8
apparaît deux fois dans le tableau scores
, les deux valeurs 8
seront supprimées.
Comme l’opérateur $pull
, qui supprime les éléments du tableau en spécifiant la requête de filtre, le $pullAll
supprime/supprime les éléments du tableau qui correspondent aux valeurs répertoriées.
Nous utilisons la notation par points pour gérer les documents intégrés du tableau.
Utilisez MongoDB $pop
pour supprimer un élément d’un tableau
Nous pouvons utiliser l’opérateur $pop
si nous souhaitons supprimer le premier ou le dernier élément d’un tableau. Pour cela, on passe le -1
ou 1
à l’opérateur $pop
pour supprimer un élément du tableau du premier ou du dernier.
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{ _id: ObjectId("62aae796f27219958a489b89") },
{ $pop: { "scores": -1 } }
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
Utilisez MongoDB $unset
pour supprimer un champ contenant l’élément donné
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{ _id : ObjectId("62aae796f27219958a489b89") },
{ $unset : {"scores" : 8 }}
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
Ici, nous utilisons l’opérateur $unset
pour supprimer un champ spécifique qui contient la valeur donnée. Par exemple, nous supprimons le champ scores
qui correspond à la requête de filtre et contient 8
comme élément de tableau.
Rappelez-vous que lorsque nous utilisons l’opérateur $unset
avec un opérateur positionnel ($
), il ne supprime pas l’élément correspondant mais le définit sur null
. Consultez la section suivante pour vous entraîner.
Utilisez l’opérateur positionnel MongoDB pour définir l’élément sur null
au lieu de le supprimer
Exemple de code :
// MongoDB version 5.0.8
> db.collection.update(
{"services": "Facebook"},
{ $unset: {"services.$" : 1}}
)
PRODUCTION:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", null ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
Cet extrait de code utilise $unset
avec l’opérateur positionnel pour définir l’élément du tableau sur null
au lieu de le supprimer. Nous utilisons $
pour mettre à jour le premier élément du tableau où la valeur est Facebook
dans le tableau services
.
Cette approche peut être utilisée lorsque nous ne connaissons pas la position d’un élément du tableau. D’autre part, nous pouvons également utiliser le $[]
(tous les opérateurs positionnels) si nous voulons mettre à jour tous les éléments dans le champ de tableau donné.