Vanaf Mongo 4.2
, db.collection.update()
kan een aggregatiepijplijn accepteren, zodat eindelijk een veld kan worden bijgewerkt/gemaakt op basis van een ander veld:
// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
{},
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
{ multi: true }
)
// { a: "Hello", b: "World", active: true }
// { a: "Olleh", b: "Dlrow", active: false }
-
Het eerste deel
{}
is de match-query, die filtert welke documenten moeten worden bijgewerkt (in ons geval alle documenten). -
Het tweede deel
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
is de update-aggregatiepijplijn (let op de vierkante haakjes die het gebruik van een aggregatiepijplijn aangeven).$set
is een nieuwe aggregatie-operator en een alias van$addFields
. Dan kan elke aggregatie-operator worden gebruikt binnen de$set
fase; in ons geval een voorwaardelijke gelijkheidscontrole waarvan de waarde afhangt die moet worden gebruikt voor de nieuweactive
veld. -
Vergeet
{ multi: true }
niet , anders wordt alleen het eerste overeenkomende document bijgewerkt.