MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

In mongoDb, come si rimuove un elemento dell'array in base al suo indice?

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