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

Atualização do MongoDB com condição


Iniciando o Mongo 4.2 , db.collection.update() pode aceitar um pipeline de agregação, permitindo finalmente a atualização/criação de um campo baseado em outro campo:
// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
  {},
  [ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
  { multi: true }
)
// { a: "Hello", b: "World", active: true  }
// { a: "Olleh", b: "Dlrow", active: false }

  • A primeira parte {} é a consulta de correspondência, filtrando quais documentos atualizar (no nosso caso todos os documentos).

  • A segunda parte [ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ] é o pipeline de agregação de atualização (observe os colchetes que significam o uso de um pipeline de agregação). $set é um novo operador de agregação e um alias de $addFields . Então, qualquer operador de agregação pode ser usado dentro do $set etapa; no nosso caso, uma verificação de igualdade condicional da qual depende o valor a ser usado para o novo active campo.

  • Não se esqueça de { multi: true } , caso contrário, apenas o primeiro documento correspondente será atualizado.