MongoDB updateOne() , updateMany() e seus operadores
Tags: braziliandevs, node, mongodb, database
Published: 2021-05-26 14:11:29

###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*
```js
{
    "name": "Emanuel",
    "password": "123456",
    "email": "emanuel@gmail.com"
}
```

###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*

```js
//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)
```

*Retorno*
```js
{"name": "Rodrigo", "email": "emanuel@gmail.com", "password": "123456"}
```

####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*
```js
{
    "name": "Emanuel",
    "password": "123456",
    "email": "emanuel@gmail.com",
    "genre": "male",
},
{
    "name": "Rodrigo",
    "password": "rodrigo123",
    "email": "rodrigo@gmail.com",
    "genre": "male"
}
```

*Exemplo*

```js
const filter = { genre: "male" }
const update = { $set: { password: "123" } }
const user = db.users.updateMany(filter, update)
```

*Retorno*
```js
[{"name": "Rodrigo", "email": "rodrigo@gmail.com", "password": "123", "genre": "male"}, {"name": "Emanuel", "email": "emanuel@gmail.com", "password": "123", "genre": "male"}]
```

##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](https://docs.mongodb.com/manual/reference/operator/update/) você encontra diversos, mas vou estar deixando os que mais utilizo.

*Exemplo de como utilizar um operador*
```js
db.users.updateMany(
{
 genre: "male"
},
{
  $set: { genre: "female", name: "Robson" },
  <operator2>: { <field2>: <value2>, ... },
  ...
}
)
```

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

*Documento*
```js
{"name": "Rodrigo", "genre": "male"}
```

*Exemplo*
```js
const user = db.users.updateMany({ name: "Rodrigo" }, { $set: { genre: "female" } })
```

*Retorno*
```js
{"name": "Rodrigo", "genre": "female"}
```

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

*Documento*
```js
{"name": "Rodrigo", "seguidores": 10}
```

*Exemplo*
```js
const user = db.users.updateOne({ name: "Rodrigo" }, { $inc: { seguidores: 2 } })
```

*Retorno*
```js
{"name": "Rodrigo", "seguidores": 12}
```

###Operador $push
Este operador é responsável por adicionar um novo item a uma array.

*Documento*
```js
{"name": "Rodrigo", "interests": ["basquete"]}
```

*Exemplo*
```js
const user = db.users.updateOne({ name: "Rodrigo" }, { $push: { interests: "futebol" } })
```

*Retorno*
```js
{"name": "Rodrigo", "interests": ["basquete", "futebol"]}
```

###Operador $pull
Este operador é responsável por remover um item da sua array.

*Documento*
```js
{"name": "Rodrigo", "interests": ["basquete", "futebol"]}
```

*Exemplo*
```js
const user = db.users.updateOne({ name: "Rodrigo" }, { $pull: { interests: "basquete" } })
```

*Retorno*
```js
{"name": "Rodrigo", "interests": ["futebol"]}
```

###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](https://www.linkedin.com/in/emanuelcferreira/)
Email: contatoferreirads@gmail.com

Revisão do Texto: [Ana Julia Lima](https://www.linkedin.com/in/ana-julia-lima-6222b1210/)