Starter Mongo 4.2
, db.collection.update()
kan acceptere en aggregeringspipeline, som endelig tillader opdatering/oprettelse af et felt baseret på et andet felt:
// { 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 }
-
Den første del
{}
er matchforespørgslen, der filtrerer, hvilke dokumenter der skal opdateres (i vores tilfælde alle dokumenter). -
Anden del
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
er opdaterings-aggregeringspipeline (bemærk de firkantede parenteser, der angiver brugen af en aggregeringspipeline).$set
er en ny aggregeringsoperator og et alias for$addFields
. Så kan enhver aggregeringsoperator bruges i$set
scene; i vores tilfælde en betinget lighedskontrol, som afhænger af den værdi, der skal bruges til den nyeactive
felt. -
Glem ikke
{ multi: true }
, ellers vil kun det første matchende dokument blive opdateret.