1 / 12
Modulo 6 / Back-End com Node.js

Banco de dados: MongoDB

Conceitos de banco de dados NoSQL e operações CRUD.

school Aula 28 schedule 2 horas

Tipos de banco

SQL vs NoSQL

table_chart SQL (Relacional)

  • Dados em tabelas com linhas e colunas
  • Schema fixo (estrutura definida)
  • Linguagem SQL para consultas
  • Exemplos: MySQL, PostgreSQL, SQLite
SELECT * FROM usuarios WHERE idade > 18;

data_object NoSQL (Não-relacional)

  • Dados em documentos (JSON-like)
  • Schema flexível (cada documento pode variar)
  • Consultas com objetos JavaScript
  • Exemplos: MongoDB, Firebase, Redis
db.usuarios.find({ idade: { $gt: 18 } })

Database

O que é MongoDB?

database Banco orientado a documentos

  • Armazena dados como documentos BSON (Binary JSON)
  • Muito usado com Node.js/Express
  • Escala horizontalmente (sharding)
  • MongoDB Atlas: versão cloud gratuita

account_tree Estrutura

Database

Contém múltiplas collections (equivalente ao "banco")

Collection

Grupo de documentos (equivalente à "tabela")

Document

Objeto JSON com dados (equivalente à "linha")

Field

Par chave-valor dentro do documento (equivalente à "coluna")

Formato

Anatomia de um documento

description Exemplo de documento

{ "_id": "64f1a2b3c4d5e6f7a8b9c0d1", "nome": "Ana Silva", "email": "ana@email.com", "idade": 22, "curso": "Programação Web", "notas": [8.5, 9.0, 7.8], "endereco": { "cidade": "São Paulo", "estado": "SP" }, "ativo": true, "createdAt": "2025-01-15T10:30:00Z" }

info Conceitos-chave

  • _id — identificador único gerado automaticamente (ObjectId)
  • Campos podem ser strings, números, booleanos, arrays, objetos
  • Documentos na mesma collection podem ter estruturas diferentes
  • Suporta documentos aninhados (embedded documents)
  • Tamanho máximo de 16 MB por documento

Setup

MongoDB Atlas

cloud Criando o cluster

1 Acesse mongodb.com/atlas
2 Crie uma conta (pode usar Google/GitHub)
3 Escolha o plano M0 Free (gratuito, 512 MB)
4 Crie um usuário e senha para o banco
5 Libere seu IP em Network Access (ou 0.0.0.0)
6 Copie a Connection String

link Connection String

// Formato da connection string mongodb+srv://<usuario>:<senha>@ cluster0.abc123.mongodb.net/ <database>?retryWrites=true // Exemplo real mongodb+srv://aluno:senha123@ cluster0.abc123.mongodb.net/ minha-api?retryWrites=true
warning NUNCA coloque a connection string no código. Use variáveis de ambiente (.env).

CRUD

Create — Inserir

add_circle insertOne()

// Inserir um documento db.alunos.insertOne({ nome: "Ana Silva", email: "ana@email.com", idade: 22, curso: "Programação Web" })

playlist_add insertMany()

// Inserir vários documentos db.alunos.insertMany([ { nome: "Carlos", idade: 20 }, { nome: "Maria", idade: 25 } ])

CRUD

Read — Consultar

search find()

// Buscar todos db.alunos.find() // Buscar com filtro db.alunos.find({ idade: 22 }) // Buscar um documento db.alunos.findOne({ email: "ana@email.com" }) // Projeção (selecionar campos) db.alunos.find( {}, { nome: 1, email: 1 } )

filter_alt Operadores de consulta

// Maior que { idade: { $gt: 18 } } // Menor ou igual { idade: { $lte: 30 } } // Dentro de uma lista { curso: { $in: ["Web", "Mobile"] } } // AND lógico { idade: { $gte: 18 }, ativo: true } // OR lógico { $or: [ { idade: 20 }, { idade: 25 } ]}

CRUD

Update — Atualizar

edit updateOne()

// Atualizar um campo db.alunos.updateOne( { email: "ana@email.com" }, { $set: { idade: 23 } } ) // Incrementar um valor db.alunos.updateOne( { nome: "Ana" }, { $inc: { idade: 1 } } )

edit_note updateMany()

// Atualizar vários documentos db.alunos.updateMany( { curso: "Web" }, { $set: { ativo: true } } ) // Adicionar elemento ao array db.alunos.updateOne( { nome: "Ana" }, { $push: { notas: 9.5 } } )
Operadores: $set $inc $push $pull $unset

CRUD

Delete — Remover

delete deleteOne()

// Remover um documento db.alunos.deleteOne({ email: "ana@email.com" })

delete_sweep deleteMany()

// Remover vários documentos db.alunos.deleteMany({ ativo: false }) // Remover TODOS (cuidado!) db.alunos.deleteMany({})
warning deleteMany({}) sem filtro apaga TODOS os documentos da collection!

Resumo CRUD:

Create
insertOne/Many
Read
find/findOne
Update
updateOne/Many
Delete
deleteOne/Many

Extras

Sort, Limit e Count

sort Ordenar

// Ordem crescente db.alunos.find() .sort({ nome: 1 }) // Ordem decrescente db.alunos.find() .sort({ idade: -1 })

format_list_numbered Limitar

// Primeiros 5 resultados db.alunos.find() .limit(5) // Pular + limitar (paginação) db.alunos.find() .skip(10).limit(5)

tag Contar

// Total de documentos db.alunos.countDocuments() // Com filtro db.alunos.countDocuments({ ativo: true })

Hora de praticar

Exercício prático

database Explorando o MongoDB Atlas

  1. Crie uma conta no MongoDB Atlas e um cluster M0 (gratuito)
  2. Crie um banco de dados escola com uma collection alunos
  3. Insira pelo menos 5 alunos com campos variados
  4. Pratique consultas: buscar por nome, filtrar por idade, ordenar por nota
  5. Atualize a idade de um aluno e adicione uma nota ao array
  6. Remova um aluno pelo email
lightbulb Use o MongoDB Compass (app desktop) ou o shell do Atlas para praticar as queries.
Próxima aula

Aula 29

Express + MongoDB com Mongoose.

task_alt O que aprendemos hoje

  • check_circle Diferenças entre SQL e NoSQL
  • check_circle Estrutura do MongoDB: database, collection, document
  • check_circle Configuração do MongoDB Atlas
  • check_circle Operações CRUD completas
  • check_circle Operadores de consulta, sort, limit e count
Próxima aula
auto_stories Referência: MongoDB Docs
Leandro Medeiros