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

MongoDB $pullAll

I MongoDB kan du bruge $pullAll operator for at fjerne alle forekomster af de angivne værdier fra et eksisterende array.

Brug $pullAll i forbindelse med en metode såsom update() , updateOne() , eller updateMany() for at opdatere det eller de angivne dokumenter med ændringen.

Eksempel

Antag, at vi har en samling med følgende dokumenter:

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

Og lad os sige, at vi vil fjerne alle værdier af 7 fra arrayet i dokument 1.

Vi kan gøre dette:

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

Output:

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

Den meddelelse fortæller os, at et dokument matchede, og et (dvs. det samme dokument) blev ændret.

Lad os tage et kig 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, at arrayet i dokument 1 har haft alle sine 7 værdier fjernet som angivet.

Fjern flere værdier

Argumentet, vi gav til $pullAll er en matrix, og vi kan derfor fjerne flere værdier ved at adskille dem med et komma.

Eksempel:

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

Output:

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

Lad os nu tjekke 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, at værdierne 17 og 18 er blevet fjernet fra arrayet i dokument 2.

Opdater alle dokumenter

Du kan tilføje multi: true eller brug updateMany() metode til at opdatere alle dokumenter, der matcher kriterierne.

Når du gør dette, skal du fjerne eventuelle udvælgelseskriterier fra det første forespørgselsdokument (der angiver, hvilke dokumenter der skal opdateres). Med andre ord, brug et tomt dokument som det første argument til update() (eller updateMany() ) metode.

Eksempel:

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

Output:

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

I dette tilfælde kan vi se, at tre dokumenter matchede (fordi der er tre dokumenter i samlingen), og alle tre blev ændret (fordi de alle indeholdt de angivne værdier).

Lad os tjekke 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, at alle forekomster er blevet opdateret som angivet.


  1. Redis Key udløbsmeddelelse med Jedis

  2. hvordan man downloader en fil gemt i gridFS ved hjælp af nodeJS

  3. Redis failover med StackExchange / Sentinel fra C#

  4. Apache HBase + Apache Hadoop + Xceivers