MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualização do MongoDBMany com condicional


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() .