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

MongoDB $pop

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 .