
# MongoDB Cheat Sheet
###### Inspirado no cheat sheet do [Web Dev Simplified](https://webdevsimplified.com/mongodb-cheat-sheet.html)
> [TOC]
## Terminology
### Database
> [color=#f23cf2] Um contêiner para coleções. Isso é o mesmo que um banco de dados em SQL e
geralmente cada projeto terá seu próprio banco de dados cheio de coleções diferentes.
### Collection
> [color=#f23cf2] Um agrupamento de documentos dentro de um banco de dados. Isso é o mesmo que uma tabela em
SQL e geralmente cada tipo de dados (usuários, posts, produtos) terão seus próprios
collection.collections.
### Document
> [color=#f23cf2] Um registro dentro de uma coleção. Isso é o mesmo que uma linha no SQL e geralmente
haverá um documento por objeto na coleção. Um documento é também
essencialmente apenas um objeto JSON.
### Field
> [color=#f23cf2] Um par de chave-valor em um documento. Isso é o mesmo que uma coluna no SQL.
Cada documento terá um certo número de campos que contêm informações
como nome, endereço, hobbies, etc. Uma diferença importante entre SQL
e MongoDB é que um campo pode conter valores como objetos JSON e
arrays em vez de apenas strings, número, booleanos, etc.
## Basic Commands
```mongosh=1
mongosh
```
> [color=#f23cf2] Abre uma conexão com sua instância local do MongoDB. Todos os outros comandos será executado dentro desta conexão mongosh.
---
```mongosh=1
show dbs
```
> [color=#f23cf2] Mostrar todos os bancos de dados na instância atual do MongoDB
---
```mongosh=1
use <dbname>
use myDatabase
```
> [color=#f23cf2] Mude para o banco de dados fornecido por dbname
Mudar para myDatabase
---
```mongosh=1
db
```
> [color=#f23cf2] Mostrar nome do banco de dados atual
---
```mongosh=1
cls
```
> [color=#f23cf2] Limpar a tela do terminal
---
```mongosh=1
show collections
```
> [color=#f23cf2] Mostrar todas as coleções no banco de dados atual
---
```mongosh=1
db.dropDatabase()
```
> [color=#f23cf2] Excluir o banco de dados atual
---
```mongosh=1
exit
```
> [color=#f23cf2] Saia da sessão mongosh
## Create
> [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica
`db.<collectionName>.<command>`
### **insertOne**
```mongosh=1
db.users.insertOne({ name: "Jonathan" })
```
> [color=#f23cf2] Crie um novo documento dentro da coleção especificada.
Adiciona um novo documento com o nome de Jonathan na coleção de usuários
### **insertMany**
```mongosh=1
db.users.insertMany([{ age: 26 }, { age: 20 }])
```
> [color=#f23cf2] Crie vários novos documentos dentro de uma coleção específica.
Adicione dois novos documentos com 26 e 20 anos de idade à coleção de usuários
## Read
> [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica
`db.<collectionName>.<command>`
### **find**
```mongosh=1
db.users.find()
```
> [color=#f23cf2] Obtenha todos os documentos.
Obter todos os usuários
### **find(\<filterObject>)**
```mongosh=1
db.users.find({ name: "Jonathan" })
db.users.find({ "address.street": "123 Main St" })
```
> [color=#f23cf2] Encontre todos os documentos que correspondem ao objeto de filtro.
Obtenha todos os usuários com o nome Jonathan
Obtenha todos os usuários cujo campo de endereço tenha um campo de rua com o valor 123 Main St
### **find(\<filterObject>, \<selectObeject>)**
```mongosh=1
db.users.find({ name: "Jonathan" }, { name: 1, age: 1 })
db.users.find({}, { age: 0})
```
> [color=#f23cf2] Encontre todos os documentos que correspondem ao objeto de filtro, mas apenas retornar o campo especificado no objeto selecionado.
Obtenha todos os usuários com o nome Jonathan, mas retorne apenas seu nome, idade e _id
Obter todos os usuários e retornar todas as colunas, exceto idade
### **findOne**
```mongosh=1
db.users.findOne({ name: "Jonathan" })
```
> [color=#f23cf2] O mesmo que find, mas retornar apenas o primeiro documento que corresponde ao objeto de filtro.
Obtenha o primeiro usuário com o nome Jonathan
### **countDocuments**
```mongosh=1
db.users.countDocuments({ name: "Jonathan" })
```
> [color=#f23cf2] Retorna a contagem dos documentos que correspondem ao filtro
objeto passado para ele.
Obtenha o número de usuários com o nome Jonathan
## Update
> [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica
`db.<collectionName>.<command>`
### **updateOne**
```mongosh=1
db.users.updateOne({ age: 20 }, { $set: { age: 21 } })
```
> [color=#f23cf2] Atualiza o primeiro documento que corresponde ao objeto de filtro com os dados passados para o segundo parâmetro que é o
atualizar objeto.
Atualize o primeiro usuário com idade de 20 para a idade de 21
### **updateMany**
```mongosh=1
db.users.updateMany({ age: 12 }, { $inc: { age: 3 } })
```
> [color=#f23cf2] Atualize todos os documentos que correspondem ao objeto de filtro com o dados passados para o segundo parâmetro que é a atualização objeto.
Atualize todos os usuários com idade de 12 anos adicionando 3 à idade deles
### **replaceOne**
```mongosh=1
db.users.replaceOne({ age: 12 }, { age: 13 })
```
> [color=#f23cf2] Substitua o primeiro documento que corresponde ao objeto de filtro com o objeto exato passado como o segundo parâmetro. este substituirá completamente o objeto inteiro e não apenas
atualizar campos individuais.
Substitua o primeiro usuário com 12 anos de idade por um objeto que tenha 13 anos como seu único campo
## Delete
> [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica
`db.<collectionName>.<command>`
### **deleteOne**
```mongosh=1
db.users.deleteOne({ age: 20 })
```
> [color=#f23cf2] Excluir o primeiro documento que corresponde ao objeto de filtro.
Excluir o primeiro usuário com 20 anos de idade
### **deleteMany**
```mongosh=1
db.users.deleteOne({ age: 12 })
```
> [color=#f23cf2] Excluir todos os documentos que correspondem ao objeto de filtro.
Excluir todos os usuários com idade de 12 anos
## Complex Filter Object
> [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser usada dentro de um objeto de filtro para fazer consultas complexas
### **\$eq**
```mongosh=1
db.users.find({ name: { $eq: "Jonathan" } })
```
> [color=#f23cf2] Verifique a igualdade.
Obter todos os usuários com o nome Jonathan
### **\$ne**
```mongosh=1
db.users.find({ name: { $ne: "Jonathan" } })
```
> [color=#f23cf2] Verifique se não é igual.
Obter todos os usuários com um nome diferente de Jonathan
### **\$gt \/ \$gte**
```mongosh=1
db.users.find({ age: { $gt: 12 } })
db.users.find({ age: { $gte: 15 } })
```
> [color=#f23cf2] Verifique se há maior que e maior ou igual a.
Obter todos os usuários com idade superior a 12 anos
Obter todos os usuários com idade maior ou igual a 15 anos
### **\$lt \/ \$lte**
```mongosh=1
db.users.find({ age: { $lt: 12 } })
db.users.find({ age: { $lte: 15 } })
```
> [color=#f23cf2] Verifique se há menor e menor ou igual a.
Obter todos os usuários com idade inferior a 12 anos
Obter todos os usuários com idade menor ou igual a 15 anos
### **\$in**
```mongosh=1
db.users.find({ name: { $in: ["Maria Victória", "Jonathan"]} })
```
> [color=#f23cf2] Verificar se um valor é um dos muitos valores.
Obter todos os usuários com um nome de Maria Victória ou Jonathan
### **\$nin**
```mongosh=1
db.users.find({ name: { $nin: ["Maria Victória", "Jonathan"]} })
```
> [color=#f23cf2] Verifique se um valor não é nenhum dos muitos valores.
Obtenha todos os usuários que não têm o nome Maria Victória ou Jonathan
### **\$and**
```mongosh=1
db.users.find({ $and: [{ age: 12 }, { name: "Jonathan"}] })
db.users.find({ age: 12, name: "Jonathan" })
```
> [color=#f23cf2] Verifique se várias condições são todas verdadeiras.
Obtenha todos os usuários que tenham 12 anos e o nome Jonathan
e uma maneira alternativa de fazer a mesma coisa. Geralmente você não precisa de $and.
### **\$or**
```mongosh=1
db.users.find({ $or: [{ age: 12 }, { name: "Jonathan"}] })
```
> [color=#f23cf2] Verifique se uma das várias condições é verdadeira.
Obter todos os usuários com um nome de Jonathan ou uma idade de 12 anos
### **\$not**
```mongosh=1
db.users.find({ name: { $not: { $eq: "Jonathan" } } })
```
> [color=#f23cf2] Negue o filtro dentro de \$not.
Obter todos os usuários com um nome diferente de Jonathan
### **\$exists**
```mongosh=1
db.users.find({ name: { $exists: true } })
```
> [color=#f23cf2] Verifique se existe um campo.
Obter todos os usuários que têm um campo de nome
### **\$expr**
```mongosh=1
db.users.find({ $expr: { $gt: ["$balance", "$debt"] } })
```
> [color=#f23cf2] Faça comparações entre diferentes campos.
Obtenha todos os usuários com saldo maior que a dívida.
### **\$size**
```mongosh=1
db.users.find({ hobbies: { $size: 2 } })
```
> [color=#f23cf2] O $size corresponde a qualquer array com o número de elementos especificados pelo argumento.
Retornar os usuários que tem 2 elementos no array de hobbies.
## Complex Update Object
> [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser usada dentro de um objeto de atualização para fazer atualizações complexas
### **\$set**
```mongosh=1
db.users.updateOne({ age: 12 }, { $set: { name: "Davi" } })
```
> [color=#f23cf2] Atualize apenas os campos passados para \$set. Isso não afetará
quaisquer campos não passados para \$set.
Atualize o nome do primeiro usuário com 12 anos para o valor Davi
### **\$inc**
```mongosh=1
db.users.updateOne({ age: 12 }, { $inc: { age: 2 } })
```
> [color=#f23cf2] Incremente o valor do campo pelo valor fornecido.
Adicione 2 à *age* do primeiro usuário com 12 anos
### **\$rename**
```mongosh=1
db.users.updateMany({}, { $rename: { age: "years" } })
```
> [color=#f23cf2] Renomear um campo.
Renomeie o campo *age* para *years* para todos os usuários
### **\$unset**
```mongosh=1
db.users.updateOne({ age: 12 }, { $unset: { age: "" } })
```
> [color=#f23cf2] Remover um campo.
Remove o campo *age* do primeiro usuário com 12 anos
### **\$push**
```mongosh=1
db.users.updateMany({}, { $push: { friends: "Ingrid" } })
```
> [color=#f23cf2] Adicionar um valor a um campo de *array*.
Adiciona Ingrid ao *array* de *friends* para todos os usuários
### **\$pull**
```mongosh=1
db.users.updateMany({}, { $pull: { friends: "João" } })
```
> [color=#f23cf2] Remover um valor de um campo de *array*
Remove o João do *array* de *friends* para todos os usuários
### **\$currentDate**
```mongosh=1
db.users.updateOne({ name: "Jonathan" }, { $currentDate: { date: true } })
```
> [color=#f23cf2] Define o valor de um campo para a data atual, podendo ser do tipo date ou timestamp. O padrão é date.
Atualizar o campo date do usuário Jonathan para a data atual.
## Read Modifiers
> [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser adicionada ao final de qualquer operação de leitura
### **sort**
```mongosh=1
db.users.find().sort({ name: 1, age: -1 })
```
> [color=#f23cf2] Ordenar os resultados de uma pesquisa pelos campos fornecidos.
Ordernar todos os usuários por *name* em ordem alfabética e, se algum *name* for o mesmo a ordernação por *age* em ordem inversa
### **limit**
```mongosh=1
db.users.find().limit(2)
```
> [color=#f23cf2] Retorna apenas um número definido de documentos.
Retorna apenas os 2 primeiros usuários
### **skip**
```mongosh=1
db.users.find().skip(4)
```
> [color=#f23cf2] Pule um número definido de documentos desde o início.
Pule os primeiros 4 usuários ao retornar resultados. Isso é ótimo para paginação quando
combinado com *limit*.
### **pretty**
```mongosh=1
db.users.find().pretty()
```
> [color=#f23cf2] Configura o cursor para exibir os resultados em um formato de fácil leitura.
Retorna todos os usuários.