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.