sql >> Database >  >> NoSQL >> MongoDB

MongoDB $pullAll

In MongoDB kunt u de $pullAll . gebruiken operator om alle instanties van de opgegeven waarden uit een bestaande array te verwijderen.

Gebruik $pullAll in combinatie met een methode zoals update() , updateOne() , of updateMany() om de gespecificeerde documenten bij te werken met de wijziging.

Voorbeeld

Stel we hebben een collectie met de volgende documenten:

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

En laten we zeggen dat we alle waarden van 7 . willen verwijderen uit de array in document 1.

We kunnen dit:

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

Uitgang:

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

Dat bericht vertelt ons dat één document overeenkomt en één (d.w.z. hetzelfde document) is gewijzigd.

Laten we de collectie nu eens bekijken:

db.foo.find()

Resultaat:

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

We kunnen zien dat de array in document 1 al zijn 7 . heeft gehad waarden verwijderd zoals gespecificeerd.

Verwijder meerdere waarden

Het argument dat we hebben gegeven aan $pullAll is een array, en daarom kunnen we meerdere waarden verwijderen door ze te scheiden met een komma.

Voorbeeld:

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

Uitgang:

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

Laten we nu de collectie nog eens bekijken:

db.foo.find()

Resultaat:

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

We kunnen zien dat de waarden 17 en 18 zijn verwijderd uit de array in document 2.

Alle documenten bijwerken

U kunt multi: true . toevoegen of gebruik de updateMany() methode om alle documenten bij te werken die aan de criteria voldoen.

Wanneer u dit doet, verwijdert u alle selectiecriteria uit het eerste querydocument (dat specificeert welke documenten moeten worden bijgewerkt). Met andere woorden, gebruik een leeg document als het eerste argument voor de update() (of updateMany() ) methode.

Voorbeeld:

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

Uitgang:

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

In dit geval kunnen we zien dat drie documenten overeenkwamen (omdat er drie documenten in de collectie zijn), en alle drie zijn gewijzigd (omdat ze allemaal de opgegeven waarden bevatten).

Laten we de collectie nog eens bekijken:

db.foo.find()

Resultaat:

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

We kunnen zien dat alle instanties zijn bijgewerkt zoals gespecificeerd.


  1. Hoe ClusterControl automatisch databaseherstel en failover uitvoert

  2. MongoDB Multikey Indexes &Index Intersection Bounds

  3. ServiceStack.Net Redis:gerelateerde objecten opslaan versus gerelateerde object-ID's

  4. Twee collecties samenvoegen in MongoDB