Você realmente quer
bulkWrite()
usando dois "updateMany"
declarações dentro dele. As expressões de agregação não podem ser usadas para fazer "seleção alternativa" em nenhuma forma de instrução de atualização. db.country.bulkWrite([
{ "updateMany": {
"filter": { "pop": { "$lt": 20000000 } },
"update": { "$set": { "country": "Small Country" } }
}},
{ "updateMany": {
"filter": { "pop": { "$gt": 20000000 } },
"update": { "$set": { "country": "Large Country" } }
}}
])
Ainda há uma "solicitação de recurso" pendente em SERVER-6566 para "sintaxe condicional", mas isso ainda não foi resolvido. A API "bulk" foi realmente introduzida depois que essa solicitação foi levantada e realmente pode ser adaptada como mostrado para fazer mais ou menos a mesma coisa.
Também usando
$out
em uma declaração de agregação, como sugerido de outra forma, não é uma opção para "atualizar" e só pode escrever para uma "nova coleção" no momento. A mudança prevista do MongoDB 4.2 em diante permitiria $out
para realmente "atualizar" uma coleção existente, entretanto isso seria apenas quando a coleção a ser atualizada fosse diferente de qualquer outra coleção usada na coleta de dados do pipeline de agregação. Portanto, não é possível usar um pipeline de agregação para atualizar o mesmo coleção como o que você está lendo. Resumindo, use
bulkWrite()
.