Omet navegació

3.3.3.7 - Eliminació en arrays: $pop i $pull

Hi ha més d'una manera d'eliminar elements d'un array.

$pop

Si volem eliminar el primer element o l'últim, el modificador adequat és $pop. La sintaxi és

{ $pop : { clau : posicio } }

On en posició podrem posar:

  • -1 , i esborrarà el primer element
  • 1 , i esborrarà l'últim

En els següents exemples s'esborren primer l'últim element i després el primer.

> db.alumnes.findOne()
{
    "_id" : ObjectId("56df11d778549bdfbf2125e3"),
    "nom" : "Abel",
    "cognoms" : "Bernat Carrera",
    "edat" : 22,
    "adreça" : {
        "carrer" : "Major",
        "numero" : 7,
        "cp" : "12502"
    },
    "nota" : [
        5,
        9.5,
        7.5,
        9,
        7
    ]
}

> db.alumnes.update( {nom:"Abel"} , { $pop : { nota : 1 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
    "_id" : ObjectId("56df11d778549bdfbf2125e3"),
    "nom" : "Abel",
    "cognoms" : "Bernat Carrera",
    "edat" : 22,
    "adreça" : {
        "carrer" : "Major",
        "numero" : 7,
        "cp" : "12502"
    },
    "nota" : [
        5,
        9.5,
        7.5,
        9
    ]
}

> db.alumnes.update( {nom:"Abel"} , { $pop : { nota : -1 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.findOne()
{
    "_id" : ObjectId("56df11d778549bdfbf2125e3"),
    "nom" : "Abel",
    "cognoms" : "Bernat Carrera",
    "edat" : 22,
    "adreça" : {
        "carrer" : "Major",
        "numero" : 7,
        "cp" : "12502"
    },
    "nota" : [
        9.5,
        7.5,
        9
    ]
}

$pull

Amb aquest modificador esborrarem els elements de l'array que coincidesquen amb una condició, estiguen en la posició que estiguem. Observeu com es pot eliminar més d'un element.

Per a poder comprovar-lo bé, primer inserim un altre element al final de l'array, amb el valor 7.5 (si heu seguit els mateixos exemples que en aquestos apunts, aquest valor ja es troba en la segona posició).

> db.alumnes.update( {nom:"Abel"} , { $push : { nota : 7.5 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })


> db.alumnes.findOne()
{
    "_id" : ObjectId("56debe3017bf4ed437dc77c8"),
    "nom" : "Abel",
    "cognoms" : "Bernat Carrera",
    "edat" : 22,
    "adreça" : {
        "carrer" : "Major",
        "numero" : 7,
        "cp" : "12502"
    },
    "nota" : [
        9.5,
        7.5,
        9,
        7.5
    ]
}

Ara anem a esborrar amb $pull l'element de valor 7.5

> db.alumnes.update( {nom:"Abel"} , { $pull : { nota : 7.5 } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.alumnes.findOne()
{
    "_id" : ObjectId("56debe3017bf4ed437dc77c8"),
    "nom" : "Abel",
    "cognoms" : "Bernat Carrera",
    "edat" : 22,
    "adreça" : {
        "carrer" : "Major",
        "numero" : 7,
        "cp" : "12502"
    },
    "nota" : [
        9.5,
        9
    ]
}