DEV Community

loading...
Cover image for MongoDB updateOne() , updateMany() e seus operadores

MongoDB updateOne() , updateMany() e seus operadores

Emanuel Ferreira
Frontend Engineer at Popstand Blockchain & Crypto enthusiast
・3 min read

Atualizando documentos

No MongoDB temos diversos métodos que nos ajudam a atualizar nossos documentos, por exemplo: adicionar um novo campo ou removê-lo e até adicionar um novo item em uma array ou remover.

Nesse artigo, vou mostrar alguns dos métodos que mais utilizo para atualizar documentos juntamente com alguns operadores de atualização. Vamos usar como exemplo o documento abaixo:

Nosso Documento

{
    "name": "Emanuel",
    "password": "123456",
    "email": "emanuel@gmail.com"
}
Enter fullscreen mode Exit fullscreen mode

Métodos e Operadores

No MongoDB possuímos mais de 5 métodos que nos auxiliam na atualização de documentos, mas no nosso artigo iremos utilizar 2 em específico que são: updateOne e updateMany.

Ambos não retornam o documento, mas vou estar deixando o retorno para demonstração. Caso queira o retorno do documento utilize o método findOneAndUpdate.

Método updateOne

O método updateOne é responsável pela atualização de somente 1 documento. O método recebe 3 parâmetros que são: filter,
update e options que deixaremos para outro momento.

Exemplo

//filter => query do documento que deseja encontrar para alteração
//update => operador que irá utilizar na atualização do documento

const filter = { name: "Emanuel" }
const update = { $set: { name: "Rodrigo" } } //Abaixo explicaremos o que é o $set.

const user = db.users.updateOne(filter, update)
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Rodrigo", "email": "emanuel@gmail.com", "password": "123456"}
Enter fullscreen mode Exit fullscreen mode

Método updateMany

O método updateMany é responsável pela atualização de diversos documentos (muita atenção ao usar esse comando). Todos os documentos que forem encontrados de acordo com a query passada serão alterados.

Documentos de exemplo

{
    "name": "Emanuel",
    "password": "123456",
    "email": "emanuel@gmail.com",
    "genre": "male",
},
{
    "name": "Rodrigo",
    "password": "rodrigo123",
    "email": "rodrigo@gmail.com",
    "genre": "male"
}
Enter fullscreen mode Exit fullscreen mode

Exemplo

const filter = { genre: "male" }
const update = { $set: { password: "123" } }
const user = db.users.updateMany(filter, update)
Enter fullscreen mode Exit fullscreen mode

Retorno

[{"name": "Rodrigo", "email": "rodrigo@gmail.com", "password": "123", "genre": "male"}, {"name": "Emanuel", "email": "emanuel@gmail.com", "password": "123", "genre": "male"}]
Enter fullscreen mode Exit fullscreen mode

Operadores de Atualização

Os métodos de atualização possuem diversos operadores de atualização que nos auxiliam na hora de atualizar um ou diversos documentos.
Na documentação você encontra diversos, mas vou estar deixando os que mais utilizo.

Exemplo de como utilizar um operador

db.users.updateMany(
{
 genre: "male"
},
{
  $set: { genre: "female", name: "Robson" },
  <operator2>: { <field2>: <value2>, ... },
  ...
}
)
Enter fullscreen mode Exit fullscreen mode

Operador $set

Este operador é responsável por adicionar um novo campo no seu documento ou até a sobrepor um campo já existente.

Documento

{"name": "Rodrigo", "genre": "male"}
Enter fullscreen mode Exit fullscreen mode

Exemplo

const user = db.users.updateMany({ name: "Rodrigo" }, { $set: { genre: "female" } })
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Rodrigo", "genre": "female"}
Enter fullscreen mode Exit fullscreen mode

Operador $inc

Este operador é responsável por incrementar ou decrementar um número ao campo (para decrementar só usar números negativos)

Documento

{"name": "Rodrigo", "seguidores": 10}
Enter fullscreen mode Exit fullscreen mode

Exemplo

const user = db.users.updateOne({ name: "Rodrigo" }, { $inc: { seguidores: 2 } })
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Rodrigo", "seguidores": 12}
Enter fullscreen mode Exit fullscreen mode

Operador $push

Este operador é responsável por adicionar um novo item a uma array.

Documento

{"name": "Rodrigo", "interests": ["basquete"]}
Enter fullscreen mode Exit fullscreen mode

Exemplo

const user = db.users.updateOne({ name: "Rodrigo" }, { $push: { interests: "futebol" } })
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Rodrigo", "interests": ["basquete", "futebol"]}
Enter fullscreen mode Exit fullscreen mode

Operador $pull

Este operador é responsável por remover um item da sua array.

Documento

{"name": "Rodrigo", "interests": ["basquete", "futebol"]}
Enter fullscreen mode Exit fullscreen mode

Exemplo

const user = db.users.updateOne({ name: "Rodrigo" }, { $pull: { interests: "basquete" } })
Enter fullscreen mode Exit fullscreen mode

Retorno

{"name": "Rodrigo", "interests": ["futebol"]}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Então, utilizamos o método updateOne quando queremos atualizar somente um documento e o método updateMany quando desejamos atualizar diversos documentos. Com o uso dos operadores certos, conseguimos resultados bem legais para suas alterações no banco.

Linkedin: Emanuel Ferreira
Email: contatoferreirads@gmail.com

Revisão do Texto: Ana Julia Lima

Discussion (2)

Collapse
rodrigorvsn profile image
Rodrigo RVSN

Muito bom, consegui entender sem nunca nem ter mexido com MongoDB

Collapse
emanuelferreira profile image
Emanuel Ferreira Author

a proposta é exatamente essa!! muito obrigado pelo feedback Rodrigo