Projetos Práticos para Aprender MongoDB
Guia técnico, objetivo e didático sobre casos reais. Estruturei quatro projetos para você praticar modelagem, consultas e pipelines de agregação sem se perder. Tudo em HTML com código executável.
Projeto 1: CRUD REST simples com MongoDB e Node.js
Eu começo com uma API REST minimalista para gerenciar recursos básicos. O foco é entender a integração entre o Node.js e o MongoDB, mantendo o código enxuto e fácil de evoluir.
- Objetivo: criar endpoints para criar, ler, atualizar e excluir documentos.
- Tecnologias: Node.js, MongoDB, driver nativo (ou Mongoose opcional), Express.
- Conceitos-chave: conexões persistentes, operações CRUD, tratamento de erros, validação básica.
Principais etapas: configuração do ambiente, definição do modelo de dados, implementação dos endpoints, testes simples.
// Exemplo de conexão com MongoDB usando o driver nativo
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useUnifiedTopology: true });
try {
await client.connect();
const db = client.db('meuapp');
// operações de CRUD podem ser executadas aqui
} finally {
await client.close();
}
}
main().catch(console.error);
Projeto 2: Modelagem de dados — embeds vs referências
Neste projeto, eu mostro como decidir entre documentos aninhados (embed) e referências (populate). A ideia é equilibrar desempenho de leitura com simplicidade de escrita e consistência.
Casos de uso comuns:
- Conteúdo com grande leitura: embed de dados que costumam ser lidos juntos.
- Entidades separadas com relacionamentos: referência para manter o tamanho do documento gerenciável.
// Exemplo de schema com validação (Mongoose)
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
}, { timestamps: true });
Projeto 3: Aggregation Framework para relatórios de faturamento
Ao trabalhar com relatórios, o pipeline de agregação aparece como ferramenta central. Aqui apresento um fluxo simples para extrair totais por mês a partir de pedidos pagos.
- Objetivo: somar valores, agrupar por período e projetar campos úteis para dashboards.
- Conceitos: match, group, project, indexes apropriados para consultas por data.
db.orders.aggregate([
{ $match: { status: 'paid' } },
{ $group: { _id: { month: { $month: '$paidAt' }, year: { $year: '$paidAt' } }, total: { $sum: '$amount' } } },
{ $project: { year: '$_id.year', month: '$_id.month', total: 1, _id: 0 } }
]);
Projeto 4: Transações e consistência em operações multi-documentos
Neste último projeto, eu demonstro como assegurar atomicidade quando várias coleções estão envolvidas. Transações ajudam a manter a consistência mesmo em cenários críticos.
// Exemplo com sessão para transação (MongoDB)
const session = client.startSession();
try {
await session.withTransaction(async () => {
// operações envolvendo múltiplos documentos/coleções
const collA = client.db('meuapp').collection('A');
const collB = client.db('meuapp').collection('B');
await collA.insertOne({ a: 1 }, { session });
await collB.updateOne({ b: 2 }, { $set: { updated: true } }, { session });
});
} finally {
await session.endSession();
}
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!