MongoDB - Updates Simples
Gabriel_Silvestre
Posted on July 22, 2022
Tabela de Conteúdo
updateOne()
updateMany()
- Operador
$set
- Operador
$mul
- Operador
$inc
- Operadores
$min
e$max
- Operador
$currentDate
- Operador
$rename
- Operador
$unset
- Links Úteis
updateOne()
O que é?
É um método do MongoDB que nos permite atualizar um único Documento dentro de uma coleção, mesmo que não passemos um filtro o método irá atualizar apenas um Documento.
Sintaxe
O updateOne()
pode receber até três parâmetros, sendo os dois primeiros obrigatórios, são eles: um filtro; o "update" em si; e ao final opções para o update.
O filtro consiste em uma condição para que possamos achar o Documento a ser atualizado, nele podemos construir uma expressão de verificação utilizando qualquer um dos Operadores de Comparação/Lógicos vistos anteriormente.
Já o "update" são os campos com os novos dados a serem inseridos no Documento, nele podemos atualizar todos os campos ou apenas um. Enquanto as opções são configurações extras e opcionais que podemos fazer em nosso updateOne()
, como definir as regras de comparação de strings
, por exemplo.
db.<coleção>.updateOne(
{ <filtro> },
{ <update> },
{ <opções> } # opcional
);
db.my-collection.updateOne(
{ name: "Gabriel" },
{ $set: { age: 22 } } # o operador $set será abordado mais a frente
)
updateMany()
O que é?
É um método que permite a atualização de múltiplos Documentos de uma só vez e caso não utilizemos um filtro, todos os Documentos da Coleção serão atualizados.
Sintaxe
A sintaxe do updateMany()
segue exatamente o mesmo padrão do updateOne()
, recebendo até três parâmetros (filtro, update, opções) sendo os dois primeiros obrigatórios.
db.<coleção>.updateMany(
{ <filtro> },
{ <update> },
{ <opções> } # opcional
);
db.my-collection.updateMany(
{ sale: true },
{ $mul: { price: Decimal128("0.8") } } # o operador $mul será abordado mais a frente
)
Operador $set
O que é?
É um operador que irá alterar o valor de um, ou mais campos especificados, podendo alterar tantos os campos de 1º nível
do Documento, assim como campos embedados.
Sintaxe
Por se tratar de um operador, seu uso deve ser feito dentro de um método que o aceite, no caso métodos de update.
Para utilizá-lo é muito simples, basta o declararmos e logo após definimos os campos e os seus novos valores.
{ $set: { <campo>: <valor>, <campo>: <valor> } }
{ $set: { color: "blue" } }
Operador $mul
O que é?
É um operador que irá MULtiplicar o valor do campo selecionado por um multiplicador especificado e como já é de se esperar, esse operador somente irá funcionar em campos do tipo numérico
Sintaxe
A sintaxe do $mul
é tão simples quanto a do $set
, com a única diferença de que algumas vezes iremos precisar realizar a conversão de tipos, como por exemplo de um inteiro para decimal.
Para realizar a multiplicação, tudo que precisamos fazer é declarar o campo a sofrer essa alteração e o multiplicador, se necessário, também precisamos fazer a conversão de tipos.
{ $mul: { <campo>: <multiplicador>, <campo>: <conversor>(<multiplicador>) } }
{ $mul: { price: 0.8, "sale.percentage": 0.2 } }
Obs: "Caso o campo no qual estamos tentando aplicar a multiplicação não exista, o MongoDB automaticamente o criará e atribuirá valor 0
a ele".
Operador $inc
O que é?
É um operador que incrementa ou decrementa, campos numéricos. O decremento é, de forma objetiva, um "incremento negativo", ou seja, utilizamos o $inc
com um número negativo.
Sintaxe
Para realizarmos o incremento de um campo tudo que precisamos fazer é declarar o operador $inc
e o campo a ser modificado, juntamente com o valor desejado.
{ $inc: { <campo>: <valor> } }
{ $inc: { qty: -5, order: 1 } }
Obs: "Caso o campo no qual estamos tentando aplicar o incremento não exista, o MongoDB automaticamente o criará e o atribuirá valor que estamos tentando aplicar a ele, mesmo que esse valor seja negativo".
Operadores $min e $max
O que são?
São operadores que realizam uma comparação para então aplicar a modificação desejada.
O $min
irá aplicar a modificação apenas nos campos que possuírem um valor maior do que aquele especificado por nós após o operador, em palavras mais simples, o $min
irá "arrastar" o valor do campo para baixo.
O $max
irá aplicar a modificação apenas nos campos que possuírem um valor menor do que aquele especificado por nós após o operador, em palavras mais simples, o $max
iras "arrastar" o valor do campo para cima.
Sintaxe
Apesar dos operadores possuírem comportamentos opostos, a sintaxe segue a mesma para ambos.
Primeiro declaramos o operador $min
/$max
, em seguida o campo que queremos modificar e por fim o novo valor que desejarmos.
{ $min: { <campo>: <valor> } }
{ $max: { <campo>: <valor> } }
{ $min: { stamina: 0 } }
{ $max: { maxMana: 4000 } }
Obs: "Caso o campo no qual estamos tentando aplicar a modificação não exista, o MongoDB automaticamente o criará e o atribuirá valor que estamos tentando aplicar a ele, mesmo que esse valor seja negativo".
Operador $currentDate
O que é?
É um operador que irá atribuir a data corrente ao campo especificado, essa data pode ter dois tipos: o Date
, que é o padrão; ou o timestamps
.
Sintaxe
Para utilizarmos o operador $currentDate
tudo o que precisamos fazer é declará-lo, dizer qual campo irá recebe-lo e por fim passar true
como valor do campo.
Porém se quisermos utilizar timestamp
como formato precisamos utilizar o operador $type
, especificando o formato timestamp
através de uma string.
{ $currentDate: { <campo>: <formato> } }
{ $currentDate: { lastUpdate: true, canceled: { $type: "timestamp" } } }
Obs: "Caso o campo no qual estamos tentando aplicar a modificação de data não exista, o MongoDB automaticamente o criará e o atribuirá a data atual a ele no formato especificado".
Operador $rename
O que é?
É um operador que permite a troca da nomenclatura dos campos de um ou mais Documentos.
Sintaxe
A sintaxe geral segue a mesma estrutura dos operadores vistos anteriormente, o invocamos, dizemos o campo a sofrer a modificação e por fim especificamos um novo valor. A única diferença é que o $rename
não irá alterar o valor do campo, mas o campo em si.
Sintaxe
Primeiro invocamos o operador $rename
, em seguida declaramos o campo a ser renomeado e por fim dizemos qual deverá ser o novo nome.
{ $rename: { <campo>: <novo nome> } }
{ $rename: { promotion: "sales" } }
Obs: "Caso o campo que estamos tentando renomear não exista, o MongoDB não irá gerar um erro, apenas não realizará nenhuma modificação".
Operador $unset
O que é?
É um operador de deleção de campos, sempre que desejarmos excluir algum campo de um ou mais documentos, utilizamos o $unset
.
Sintaxe
Invocamos o operador $unset
, seguido do campo a ser deletado e por fim passamos uma string vazia como valor.
Vale reforçar que o valor pode ser literalmente qualquer coisa, porém a documentação oficial exemplifica com uma string vazia.
{ $unset: { <campo>: "" } }
{ $unset: { uselessCamp: "" } }
{ $unset: { uselessCamp: "trem" } } # irá deletar o campo uselessCamp igual
Obs: "Caso o campo que estamos tentando deletar não exista, o MongoDB não irá gerar um erro, apenas não realizará nenhuma modificação".
Links Úteis
Posted on July 22, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.