In MongoDB, puoi usare $pop
per rimuovere il primo o l'ultimo elemento da un array.
Usa $pop
insieme a un metodo come update()
per aggiornare il documento specificato con la modifica.
Usa -1
per rimuovere il primo elemento e 1
per rimuovere l'ultimo.
Esempio
Supponiamo di avere una collezione chiamata products
con i seguenti documenti:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Rimuovi il primo elemento
Possiamo rimuovere il primo elemento dell'array nel documento 1 in questo modo:
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Quel messaggio ci dice che un documento corrispondeva e uno (cioè lo stesso documento) è stato modificato.
Diamo un'occhiata alla collezione ora:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Possiamo vedere che il primo elemento dell'array nel documento 1 è stato rimosso.
Rimuovi l'ultimo elemento
Ora rimuoviamo l'ultimo elemento dall'array nel documento 2:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Uscita:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Ora controlliamo di nuovo la collezione:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Possiamo vedere che l'ultimo elemento è stato rimosso dall'array nel documento 2.
Aggiorna tutti i documenti
Ecco un esempio che utilizza updateMany()
metodo per aggiornare tutti i documenti:
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
Uscita:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
E ricontrolla la collezione:
db.products.find()
Risultato:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
In alternativa, puoi utilizzare update()
metodo per aggiornare più documenti specificando multi: true
.