Omet navegació

3.3.3.2 - $unset

El modificador $unset servirà per a eliminar elements (camps) d'un o uns documents. Si el camp existia, l'eliminarà, i si no existia, no donarà error (avisarà que s'han modificat 0 documents).

La sintaxi és:

{ $unset : {camp : 1 } }

Haurem de posar un valor al camp que anem a esborrar per a mantenir la sintaxi correcta, i posem 1 que equival a true. També podríem posar -1, que equival a false, però aleshores no l'esborraria, i per tant no faríem res. Sempre posarem 1.

Mirem el següent exemple. Afegim un camp, que serà el número d'ordre, i després el llevarem.

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

> db.alumnes.update( {nom:"Abel"} , { $unset: {num_ordre:1} } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.alumnes.update( {nom:"Abel"} , { $unset: {puntuacio:1} } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Hem afegit primer el camp num_ordre, i hem mostrat el document per comprovar que existeix. Després esborrem el camp num_ordre (i ens confirma que ha modificat un document). Després intentem esborrar un camp que no existeix, puntuacio. No dóna error, però ens avisa que ha modificat 0 documents. Podem comprovar al final com el document ha quedat com esperàvem.

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