sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $pullAll

I MongoDB kan du använda $pullAll operatorn för att ta bort alla instanser av de angivna värdena från en befintlig array.

Använd $pullAll i kombination med en metod som update() , updateOne() , eller updateMany() för att uppdatera det eller de angivna dokumenten med ändringen.

Exempel

Anta att vi har en samling med följande dokument:

{ "_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 ] }

Och låt oss säga att vi vill ta bort alla värden för 7 från arrayen i dokument 1.

Vi kan göra detta:

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

Utdata:

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

Det meddelandet talar om för oss att ett dokument matchade och ett (dvs samma dokument) har ändrats.

Låt oss ta en titt på kollektionen nu:

db.foo.find()

Resultat:

{ "_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 ] }

Vi kan se att arrayen i dokument 1 har haft alla sina 7 värden har tagits bort som specificerat.

Ta bort flera värden

Argumentet vi gav till $pullAll är en matris, så vi kan därför ta bort flera värden genom att separera dem med ett kommatecken.

Exempel:

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

Utdata:

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

Låt oss nu kontrollera samlingen igen:

db.foo.find()

Resultat:

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

Vi kan se att värdena 17 och 18 har tagits bort från arrayen i dokument 2.

Uppdatera alla dokument

Du kan lägga till multi: true eller använd updateMany() metod för att uppdatera alla dokument som matchar kriterierna.

När du gör detta, ta bort eventuella urvalskriterier från det första frågedokumentet (som anger vilka dokument som ska uppdateras). Med andra ord, använd ett tomt dokument som det första argumentet till update() (eller updateMany() ) metod.

Exempel:

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

Utdata:

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

I det här fallet kan vi se att tre dokument matchade (eftersom det finns tre dokument i samlingen), och alla tre har modifierats (eftersom de alla innehöll de angivna värdena).

Låt oss kolla in samlingen igen:

db.foo.find()

Resultat:

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

Vi kan se att alla instanser har uppdaterats som specificerat.


  1. Synkronisera MongoDB via ssh

  2. Topp 10 funktioner i MongoDB Atlas

  3. AOF och RDB säkerhetskopior i redis

  4. Hur konverterar jag en egenskap i MongoDB från text till datumtyp?