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 novoactive
campo.
-
Não se esqueça de{ multi: true }
, caso contrário, apenas o primeiro documento correspondente será atualizado.