Вие наистина искате искате bulkWrite()
използвайки две "updateMany"
вместо това изявления в него. Изразите за агрегиране не могат да се използват за извършване на „алтернативен избор“ във всяка форма на израз за актуализиране.
db.country.bulkWrite([
{ "updateMany": {
"filter": { "pop": { "$lt": 20000000 } },
"update": { "$set": { "country": "Small Country" } }
}},
{ "updateMany": {
"filter": { "pop": { "$gt": 20000000 } },
"update": { "$set": { "country": "Large Country" } }
}}
])
Все още има неуредена „заявка за функция“ на SERVER-6566 за "условен синтаксис", но това все още не е разрешено. „Груповият“ API всъщност беше въведен след повдигането на тази заявка и наистина може да бъде адаптиран както е показано, за да направите повече или по-малко същото нещо.
Също така се използва $out
в израз за агрегиране, както беше предложено иначе, не е опция за "актуализация" и в момента може да пише само в "нова колекция". Планираната промяна от MongoDB 4.2 нататък би позволила $outкод>
всъщност да "актуализирам" съществуваща колекция,обаче това би било само когато колекцията, която трябва да се актуализира, е различна от всяка друга колекция, използвана в рамките на събирането на данни от тръбопровода за агрегиране. Така че не е възможно за използване на тръбопровод за агрегиране за актуализиране на същото колекция като това, от което четете.
Накратко, използвайте bulkWrite()
.