Wanneer u in MongoDB documenten bijwerkt die arrays bevatten, heeft u de mogelijkheid om de arrayFilters
te gebruiken parameter.
De arrayFilters
parameter stelt u in staat een array van filterdocumenten op te geven die bepalen welke array-elementen moeten worden gewijzigd.
Gebruik in het updatedocument de $[<identifier>]
gefilterde positionele operator, die de array-elementen identificeert die overeenkomen met de arrayFilters
voorwaarden voor de update-bewerking.
Syntaxis
De syntaxis gaat als volgt:
{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }
Dus bijvoorbeeld, wanneer gebruikt met de updateMany()
methode gaat het als volgt:
db.collection.updateMany(
{ <query conditions> },
{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }
)
Voorbeeld
Stel dat we een verzameling hebben met de naam players
met de volgende documenten:
{ "_id" : 1, "scores" : [ 1, 5, 17 ] } { "_id" : 2, "scores" : [ 8, 17, 18 ] } { "_id" : 3, "scores" : [ 15, 11, 8 ] }
We zouden de arrayFilters
. kunnen gebruiken parameter om alleen die array-elementen bij te werken die een waarde hebben die hoger is dan een bepaald aantal.
Voorbeeld:
db.players.updateMany(
{ scores: { $gte: 10 } },
{ $set: { "scores.$[e]" : 10 } },
{ arrayFilters: [ { "e": { $gte: 10 } } ] }
)
Resultaat:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
Het bericht vertelt ons dat drie documenten zijn gematcht en aangepast.
Zo zien de documenten er nu uit.
db.players.find()
Resultaat:
{ "_id" : 1, "scores" : [ 1, 5, 10 ] } { "_id" : 2, "scores" : [ 8, 10, 10 ] } { "_id" : 3, "scores" : [ 10, 10, 8 ] }
We kunnen zien dat alle waarden die voorheen groter dan of gelijk waren aan 10 nu 10 zijn.
In dit geval gebruikte ik e
als de <identifier>
. Merk op dat de <identifier>
moet beginnen met een kleine letter en mag alleen alfanumerieke tekens bevatten.