DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on

MongoDB - Updates Simples

Tabela de Conteúdo


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
);
Enter fullscreen mode Exit fullscreen mode
db.my-collection.updateOne(
  { name: "Gabriel" },
  { $set: { age: 22 } }  # o operador $set será abordado mais a frente
)
Enter fullscreen mode Exit fullscreen mode

voltar ao topo


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
);
Enter fullscreen mode Exit fullscreen mode
db.my-collection.updateMany(
  { sale: true },
  { $mul: { price: Decimal128("0.8") } }  # o operador $mul será abordado mais a frente
)
Enter fullscreen mode Exit fullscreen mode

voltar ao topo


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> } }
Enter fullscreen mode Exit fullscreen mode
{ $set: { color: "blue" } }
Enter fullscreen mode Exit fullscreen mode

voltar ao topo


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>) } }
Enter fullscreen mode Exit fullscreen mode
{ $mul: { price: 0.8, "sale.percentage": 0.2 } }
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


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> } }
Enter fullscreen mode Exit fullscreen mode
{ $inc: { qty: -5, order: 1 } }
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


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> } }
Enter fullscreen mode Exit fullscreen mode
{ $min: { stamina: 0 } }
{ $max: { maxMana: 4000 } }
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


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> } }
Enter fullscreen mode Exit fullscreen mode
{ $currentDate: { lastUpdate: true, canceled: { $type: "timestamp" } } }
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


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> } }
Enter fullscreen mode Exit fullscreen mode
{ $rename: { promotion: "sales" } }
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


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>: "" } }
Enter fullscreen mode Exit fullscreen mode
{ $unset: { uselessCamp: "" } }
{ $unset: { uselessCamp: "trem" } }  # irá deletar o campo uselessCamp igual
Enter fullscreen mode Exit fullscreen mode

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".

voltar ao topo


Links Úteis

voltar ao topo

Top comments (0)