MongoDB: Projetos Práticos para Aprender e Dominar – Guia Completo para Iniciantes

MongoDB: Projetos Práticos para Aprender e Dominar – Guia Completo para Iniciantes





Projetos Práticos para Aprender MongoDB


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();
}

        

Curtiu esses caminhos práticos? Leia outros posts para aprofundar ainda mais seu domínio em MongoDB e práticas de desenvolvimento.

Leia outros posts