2013-08-08 13 views
11

Se ho un array nidificato nel mio schema, come posso dire a MongoDB di rimuovere le sue voci per un modello specifico?MongoDB - Cancellazione di elementi in un array nidificato

Schema

var UserSchema = new Schema({ 
    username: String, 
    documents: [Number] 
}); 

Ho provato qualcosa di simile:

db.users.update({"username": "tom"}, {"$pullAll": {"documents": []}}) 

Ma gli elementi dell'array nidificato sono ancora lì.

risposta

22

Il codice non funziona, perché $ pullAll richiede un elenco di elementi che devono essere rimossi dall'array. Stai passando un array vuoto, quindi nulla viene rimosso.

Si può semplicemente impostare i documenti a matrice vuota invece di rimuovere tutti gli articoli:

db.users.update({"username": "tom"}, {"$set": {"documents": []}}) 

Se si vuole evitare la creazione di documenti array se "tom" non ce l'ho, quindi verificare se gamma esiste quando si seleziona il documento per aggiornare:

db.users.update({username: "tom", documents: {$exists: true}}, 
       {$set: {documents: []}}) 

UPDATE: Un'altra opzione per rimuovere tutti gli elementi dell'array è quello di utilizzare $ tirare con la domanda che soddisfa tutti i documenti:

db.users.update({username: "tom"}, {$pull: {documents: {$exists: true}}}) 
Problemi correlati