Vuoi davvero bulkWrite()
utilizzando due "updateMany"
affermazioni al suo interno invece. Le espressioni di aggregazione non possono essere utilizzate per effettuare una "selezione alternativa" in nessuna forma di istruzione di aggiornamento.
db.country.bulkWrite([
{ "updateMany": {
"filter": { "pop": { "$lt": 20000000 } },
"update": { "$set": { "country": "Small Country" } }
}},
{ "updateMany": {
"filter": { "pop": { "$gt": 20000000 } },
"update": { "$set": { "country": "Large Country" } }
}}
])
C'è ancora una "richiesta di funzionalità" in sospeso su SERVER-6566 per "sintassi condizionale", ma questo non è stato ancora risolto. L'API "bulk" è stata effettivamente introdotta dopo che questa richiesta è stata sollevata e può davvero essere adattata come mostrato per fare più o meno la stessa cosa.
Usando anche $out
in una dichiarazione di aggregazione, come altrimenti suggerito, non è un'opzione per "aggiornare" e al momento può scrivere solo in una "nuova raccolta". La modifica prevista da MongoDB 4.2 in poi consentirebbe $out
per "aggiornare" effettivamente una raccolta esistente, tuttavia questo sarebbe solo quando la raccolta da aggiornare è diversa da qualsiasi altra raccolta utilizzata all'interno della raccolta di dati dalla pipeline di aggregazione. Quindi non è possibile per utilizzare una pipeline di aggregazione per aggiornare lo stesso raccolta come quello che stai leggendo.
In breve, usa bulkWrite()
.