MongoDB Supprimer un élément d'un tableau

Mehvish Ashiq 30 janvier 2023
  1. MongoDB Supprimer un élément d’un tableau
  2. Utilisez MongoDB $pull pour supprimer un élément d’un tableau de documents
  3. Utilisez MongoDB $pullAll pour supprimer un élément d’un tableau
  4. Utilisez MongoDB $pop pour supprimer un élément d’un tableau
  5. Utilisez MongoDB $unset pour supprimer un champ contenant l’élément donné
  6. Utilisez l’opérateur positionnel MongoDB pour définir l’élément sur null au lieu de le supprimer
MongoDB Supprimer un élément d'un tableau

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 la value 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 la condition 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é.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Article connexe - MongoDB Array

Article connexe - MongoDB Document