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

MongoDB $ pullAll

In MongoDB, puoi usare $pullAll per rimuovere tutte le istanze dei valori specificati da un array esistente.

Usa $pullAll insieme a un metodo come update() , updateOne() o updateMany() per aggiornare il/i documento/i specificato/i con la modifica.

Esempio

Supponiamo di avere una collezione con i seguenti documenti:

{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

E supponiamo di voler rimuovere tutti i valori di 7 dall'array nel documento 1.

Possiamo farlo:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

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.foo.find()

Risultato:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Possiamo vedere che l'array nel documento 1 ha avuto tutto il suo 7 valori rimossi come specificato.

Rimuovi più valori

L'argomento che abbiamo fornito a $pullAll è un array, quindi possiamo rimuovere più valori separandoli con una virgola.

Esempio:

db.foo.update( 
  { _id: 2 }, 
  { $pullAll: { bar: [ 17, 18 ] } } 
)

Uscita:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Ora controlliamo di nuovo la collezione:

db.foo.find()

Risultato:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Possiamo vedere che i valori 17 e 18 sono stati rimossi dall'array nel documento 2.

Aggiorna tutti i documenti

Puoi aggiungere multi: true oppure usa updateMany() metodo per aggiornare tutti i documenti che soddisfano i criteri.

Quando si esegue questa operazione, rimuovere tutti i criteri di selezione dal primo documento di query (che specifica quale/i documento/i aggiornare). In altre parole, usa un documento vuoto come primo argomento per update() (o updateMany() ) metodo.

Esempio:

db.foo.update( 
  { }, 
  { $pullAll: { bar: [ 1, 8 ] } },
  { multi: true }
)

Uscita:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

In questo caso, possiamo vedere che tre documenti corrispondono (perché ci sono tre documenti nella raccolta) e tutti e tre sono stati modificati (perché contenevano tutti i valori specificati).

Controlliamo di nuovo la collezione:

db.foo.find()

Risultato:

{ "_id" : 1, "bar" : [ 2, 3 ] }
{ "_id" : 2, "bar" : [ 0 ] }
{ "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }

Possiamo vedere che tutte le istanze sono state aggiornate come specificato.