CW 1
🚀 O que é o MongoDB?
MongoDB é um banco de dados NoSQL, ou seja, não usa tabelas e colunas como os bancos tradicionais (SQL). Em vez disso, ele armazena os dados em documentos parecidos com arquivos JSON, que são como objetos do JavaScript.
📌 Exemplo de documento no MongoDB:
{
"nome": "Maria",
"idade": 20,
"curso": "Engenharia"
}
Isso seria como uma “linha” de uma tabela, mas aqui pode ter campos diferentes de outros documentos!
🔠 Tipos de dados no MongoDB
Para saber o tipo de dado de um campo, usamos:
typeof → mostra o tipo (como “string”, “object”, etc.)
instanceof → verifica se algo é uma instância de um tipo específico
📌 Exemplo prático:
typeof "Maria" // retorna "string"
typeof 30 // retorna "number"
mydoc._id instanceof ObjectID // verifica se o campo _id é um ObjectID
🕒 Trabalhando com Datas
MongoDB tem vários jeitos de lidar com datas:
Date() - Retorna a data como texto (string)
new Date() - Retorna um objeto Date (pra fazer cálculos)
ISODate() - Igual ao de cima, mas no padrão ISO
📌 Exemplo:
var hoje = new Date();
console.log(hoje); // ISODate("2025-08-06T12:00:00Z")
🧾 Inserindo Documentos
MongoDB trabalha com documentos dentro de coleções (como se fossem pastas com arquivos).
📥 Inserir 1 documento:
db.alunos.insertOne({
nome: "João",
idade: 18
});
📥 Inserir vários:
db.alunos.insertMany([
{ nome: "Maria", idade: 19 },
{ nome: "Carlos", idade: 20 }
]);
📌 Observação: se você não colocar um campo _id, o MongoDB cria um automático (chamado ObjectID).
🧬 Entendendo o ObjectID
Todo documento tem um campo chamado _id que é único, como um RG digital.
O tipo padrão usado é o ObjectID, que é como uma "assinatura única" para cada documento. Ele é composto por:
Data e hora da criação
ID da máquina
ID do processo
Número aleatório incremental
🛠 Métodos úteis com ObjectID:
ObjectID().getTimestamp() - Pega a data de criação do ID
ObjectID().toString() - Mostra como string ex: "ObjectID(abc123...)"
ObjectID().valueOf() - Retorna só a parte hexadecimal: "abc123..."
🔁 Operações CRUD no MongoDB
CRUD é uma sigla que representa as quatro operações básicas de um banco de dados:
C Create - Criar um novo documento
R Read - Ler/buscar um documento
U Update - Atualizar dados existentes
D Delete - Apagar um ou mais documentos
📌 Exemplos práticos:
Criar (Create):
db.alunos.insertOne({ nome: "Duda", curso: "Web" });
Ler (Read):
db.alunos.find(); // mostra todos
db.alunos.findOne({ nome: "Duda" }); // mostra o primeiro que encontrar
Atualizar (Update):
db.alunos.updateOne({ nome: "Duda" }, { $set: { curso: "Fullstack" } });
Excluir (Delete):
db.alunos.deleteOne({ nome: "Duda" });
🐍 Usando Python com MongoDB (PyMongo)
Se você quiser usar Python para mexer com o MongoDB, existe uma biblioteca chamada PyMongo.
📌 Exemplo básico:
import pymongo
cliente = pymongo.MongoClient("mongodb://localhost:27017/")
db = cliente["escola"]
colecao = db["alunos"]
Você pode usar o PyMongo para inserir, buscar e atualizar dados, igual ao que fazemos no shell do MongoDB.
🧱 Modelagem de Dados no MongoDB
Modelar os dados significa organizar a forma como eles são guardados no banco, de um jeito que seja rápido de acessar e fácil de manter.
💡 No MongoDB, como ele é flexível, você não precisa definir o formato antes de inserir os dados. Cada documento pode ter campos diferentes. Isso é ótimo, mas exige cuidado!
🔁 Relações entre Documentos
Mesmo sem tabelas, os dados podem estar relacionados entre si, como no mundo real.
📌 Tipos de relacionamento:
Tipo
Um para Um (1:1) - Um documento está ligado a outro, apenas um. (Aluno e RG)
Um para Muitos - Um documento tem vários ligados a ele. (Filme e Vários Comentários)
Muitos para Muitos - Vários documentos ligados a vários outros. (Alunos e Cursos)
🔗 Relacionamentos: Referenciados vs Incorporados
🔸 Referenciado
Os dados ficam em documentos separados, mas ligados por um ID.
Semelhante ao modelo relacional (como no SQL).
Ideal quando você acessa os dados separadamente.
📌 Exemplo:
// Documento do artigo
{
"_id": 1,
"titulo": "Aprendendo MongoDB"
}
// Documento do comentário
{
"artigo_id": 1,
"texto": "Muito bom!"
}
🔹 Incorporado
Os dados estão todos juntos em um único documento.
Evita buscas adicionais.
Ótimo para dados que sempre são acessados juntos.
📌 Exemplo:
{
"titulo": "Aprendendo MongoDB",
"comentarios": [
{ "texto": "Muito bom!" },
{ "texto": "Gostei bastante!" }
]
}
🧩 Exemplos de Relacionamento
📍 1:1 (Um para Um)
Imagine um aluno com um crachá de identificação. Só ele tem aquele crachá, e só pode ter um.
📌 Exemplo incorporado:
{
"nome": "João",
"id_aluno": {
"codigo": "A123456"
}
}
📍 1:N (Um para Muitos)
Um filme com várias avaliações.
📌 Exemplo:
{
"titulo": "Inception",
"avaliacoes": [
{ "usuario": "Maria", "nota": 10 },
{ "usuario": "Lucas", "nota": 9 }
]
}
👉 Quando tiver milhares de registros (como logs ou comentários), pode ser melhor referenciar, para não deixar o documento muito pesado.
📍 N:N (Muitos para Muitos)
Um aluno pode estar em vários cursos, e um curso pode ter vários alunos.
📌 Exemplo:
{
"nome": "Carla",
"cursos": ["Engenharia", "Design"]
}
E do outro lado:
{
"nome_curso": "Engenharia",
"alunos": ["Carla", "João"]
}
Esse tipo de modelagem geralmente usa arrays para guardar várias ligações.
🧠 Dica de ouro na modelagem
Se os dados são acessados juntos, incorpore.
Se os dados são acessados separadamente ou crescem muito, referencie.