🎯 ATIVIDADE 08 — ALÉM DAS TABELAS
Bem-vindo à oitava semana (4 aulas) do curso de Banco de Dados. Até aqui, vivemos em um mundo de tabelas rígidas e linhas fixas (SQL). Mas e se precisarmos armazenar dados que mudam de formato o tempo todo? Hoje vamos entrar no universo NoSQL com o MongoDB, o banco de documentos mais popular do mundo. 🛡️🧩
🎯 Objetivo da Aula
Ao final desta semana, você será capaz de:
- Compreender a diferença entre Relacional (SQL) e Não Relacional (NoSQL).
- Manipular Coleções e Documentos (JSON/BSON).
- Realizar inserções e consultas básicas usando o MongoDB Compass e o Shell.
- Entender o conceito de Esquema Flexível.
🏢 O Cenário Prático (Seu Desafio)
A TecProExpress está expandindo seu catálogo para produtos internacionais. O problema é que cada país envia detalhes diferentes: uns mandam voltagem, outros mandam tamanho de tela, outros mandam material. No SQL, teríamos muitas colunas vazias.
Seu desafio é criar uma coleção de PRODUTOS_NOSQL no MongoDB para armazenar esses dados de forma flexível, garantindo que nenhum detalhe técnico seja perdido.
🧠 Fundamentos: A Teoria Traduzida
NoSQL não significa "Não SQL", mas sim "Not Only SQL" (Não Apenas SQL).
1. Tabela vs. Coleção
No MongoDB, não temos tabelas, temos Coleções. Dentro delas, não temos linhas, temos Documentos.
graph LR
subgraph SQL ["Mundo Relacional"]
A[Tabela] --> B[Linha]
B --> C[Coluna Fixa]
end
subgraph NoSQL ["Mundo MongoDB"]
D[Coleção] --> E[Documento JSON]
E --> F[Campos Variáveis]
end
style SQL fill:#f5f5f5
style NoSQL fill:#e8f5e9
2. O Formato JSON
Os dados são guardados como objetos. Exemplo:
{
"nome": "Smartphone",
"preco": 2000,
"detalhes": { "cor": "Preto", "ram": "8GB" }
}
📖 Exemplo Guiado: Sua Primeira Coleção
Veja como o MongoDB cria tudo automaticamente no momento da inserção.
1. Criando e Populando (DML NoSQL)
Diferente do SQL, se a coleção não existir, o MongoDB a cria na hora.
// Usando o Banco 'tecpro_express'
use('tecpro_express');
// Inserindo um produto com campos únicos
db.produtos_nosql.insertOne({
"item": "Notebook",
"marca": "TecPro",
"especificacoes": { "cpu": "i7", "ssd": "512GB" },
"tags": ["oferta", "tecnologia"]
});
2. Consultando (Query NoSQL)
// Buscar todos os notebooks
db.produtos_nosql.find({ "item": "Notebook" });
🔍 Detalhamento do Código:
- db.colecao: Comando para acessar uma coleção específica.
- insertOne: Insere um único documento.
- { "chave": "valor" }: Estrutura de filtro básica.
🛠️ Prática Obrigatória 1: Carga Flexível
Cenário: Cadastro de produtos variados na TecProExpress.
- Abra o MongoDB Compass ou o Shell.
- Crie uma coleção chamada
catalogo. - Insira 3 Documentos com estruturas diferentes:
- Um produto com
voltagemecor. - Um produto com
tamanho_telaepeso. - Um produto com uma lista de
materiais(array).
- Um produto com
🚀 Script de Seed (NoSQL)
db.catalogo.insertMany([
{ "nome": "Luminária", "voltagem": "Bivolt", "cor": "Branca" },
{ "nome": "Monitor", "tamanho_tela": "27 pol", "peso": "4kg" },
{ "nome": "Cadeira", "materiais": ["Couro", "Aço", "Plástico"] }
]);
🛠️ Prática Obrigatória 2: Buscas Inteligentes
Cenário: O time de marketing quer filtrar o catálogo.
- Escreva uma consulta que traga apenas produtos da cor 'Branca'.
- Escreva uma consulta que utilize o operador
$gt(greater than) para listar produtos com preço acima de 100.
🏁 Resultado Esperado (Gabarito Visual)
No MongoDB, o resultado virá formatado como um objeto JSON entre chaves { }.
📤 Instruções de Entrega (Microsoft Teams)
Após testar suas operações JSON no MongoDB Compass ou no Mongo Shell:
- Salve as consultas de busca (
db.catalogo.find(...)) e inserção criadas em um arquivo com a extensão.js(JavaScript/BSON script). - Opcionalmente, envie capturas de tela mostrando os documentos inseridos visíveis na aba "Documents" do MongoDB Compass.
- Envie o arquivo (
Atividade_08_SeuNome.js) na plataforma do Microsoft Teams para avaliação de modelagem orientada a documentos.
💡 Checkpoint de Lógica
[!IMPORTANT] Reflexão Profissional: Ter um esquema flexível significa que você pode salvar qualquer coisa, mas não significa que você deve. Na indústria, mesmo no NoSQL, mantemos um padrão mínimo para que o sistema não vire uma bagunça de dados sem sentido. 🧠🛡️
🔥 Desafio de Fixação (Opcional)
Nível: Desenvolvedor FullStack 🏆
Pesquise como realizar um UPDATE no MongoDB usando o operador $set. Como você alteraria apenas o preço de um documento sem apagar o resto dos dados?
🔑 Gabarito de Código/Fórmulas Completo
Prática 1 (Inserção):
db.catalogo.insertOne({ "nome": "Teclado", "idioma": "ABNT2" });
Prática 2 (Consultas):
-- Busca por campo exato
db.catalogo.find({ "cor": "Branca" });
-- Busca com Operador (Preço > 100)
db.catalogo.find({ "preco": { $gt: 100 } });
🔍 Explicação do Gabarito:
- $gt: Significa "Greater Than" (Maior que). Operadores no MongoDB começam com
$. - find(): Se deixado vazio
find({}), ele retorna todos os documentos da coleção.