Du vil virkelig gerne have bulkWrite()
ved hjælp af to "updateMany"
udsagn i den i stedet. Aggregeringsudtryk kan ikke bruges til at udføre "alternerende valg" i nogen form for opdateringssætning.
db.country.bulkWrite([
{ "updateMany": {
"filter": { "pop": { "$lt": 20000000 } },
"update": { "$set": { "country": "Small Country" } }
}},
{ "updateMany": {
"filter": { "pop": { "$gt": 20000000 } },
"update": { "$set": { "country": "Large Country" } }
}}
])
Der er stadig en udestående "funktionsanmodning" på SERVER-6566 for "betinget syntaks", men dette er endnu ikke løst. "Bulk" API'en blev faktisk introduceret efter denne anmodning blev rejst, og kan virkelig tilpasses som vist at gøre mere eller mindre det samme.
Bruger også $out
i en aggregeringserklæring, som det ellers blev foreslået, er det ikke en mulighed at "opdatere" og kan kun skrive til en "ny samling" pt. Den planlagte ændring fra MongoDB 4.2 og fremefter ville tillade $out
til faktisk at "opdatere" en eksisterende samling, dog dette ville kun være, hvor den samling, der skal opdateres, er forskellig fra enhver anden samling, der bruges til indsamling af data fra aggregeringspipelinen. Så det er ikke muligt at bruge en aggregeringspipeline til at opdatere den samme indsamling som det du læser fra.
Kort sagt, brug bulkWrite()
.