Non esiste un modo diretto per estrarre/rimuovere dall'indice dell'array. In effetti, questo è un problema aperto http://jira.mongodb.org/browse/SERVER-1014 , puoi votarlo.
La soluzione alternativa consiste nell'usare $unset e quindi $pull:
db.lists.update({}, {$unset : {"interests.3" : 1 }})
db.lists.update({}, {$pull : {"interests" : null}})
Aggiornamento:come menzionato in alcuni commenti, questo approccio non è atomico e può causare alcune race condition se altri client leggono e/o scrivono tra le due operazioni. Se abbiamo bisogno che l'operazione sia atomica, potremmo:
- Leggi il documento dal database
- Aggiorna il documento e rimuovi l'elemento nell'array
- Sostituisci il documento nel database. Per assicurarci che il documento non sia cambiato da quando lo abbiamo letto, possiamo usare l'aggiornamento se il modello corrente descritto nei documenti mongo