~/VibeHandbook
PDF grátis

Bancos de dados

mongodb.com

MongoDB

O que é

Pense em uma pasta de fichas de índice, onde cada ficha pode conter campos diferentes, em vez de uma planilha fixa onde toda linha precisa ter as mesmas colunas. O MongoDB funciona como essa pasta de fichas. É um banco de dados de documentos que armazena dados como documentos flexíveis (pense em cada "documento" como uma ficha) agrupados em coleções. Os documentos são salvos em um formato chamado BSON, que é a forma binária do (JavaScript Object Notation) usada pelo MongoDB — uma maneira comum de escrever dados como campos nomeados. Em vez de tabelas e linhas rígidas, cada documento pode ter seu próprio formato, o que facilita evoluir um modelo rapidamente. É uma escolha popular para aplicações cujos dados se encaixam naturalmente em objetos aninhados.

Pontos fortes

  • Esquema flexível: os documentos podem variar e evoluir sem migrações.
  • Os dados mapeiam diretamente para objetos da aplicação, reduzindo código de tradução.
  • Linguagem de consulta rica, além de um poderoso pipeline de agregação.
  • Escalonamento horizontal por meio de sharding embutido.
  • Forte suporte a campos aninhados e do tipo array.

Contrapartidas

  • É fácil criar dados inconsistentes sem uma disciplina de design de esquema.
  • Transações multi-documento existem, mas são mais pesadas do que em bancos relacionais.
  • Joins ($lookup) são limitados em comparação ao (Structured Query Language); os dados costumam ser desnormalizados.
  • A desnormalização (armazenar cópias do mesmo dado em mais de um lugar para evitar buscas) pode duplicar dados e complicar atualizações.

Quando usar

Escolha o MongoDB para gestão de conteúdo, catálogos, perfis de usuário, registro de eventos, e aplicações com dados em evolução ou hierárquicos, nos quais documentos se encaixam melhor do que tabelas normalizadas.

Encaixe no vibe coding

Ao direcionar a IA, não deixe que "sem esquema" vire sinônimo de "sem plano". Peça à IA para definir um formato de documento claro e reforçá-lo com validação por JSON Schema ou um ODM (Object-Document Mapper, mapeador objeto-documento) como o Mongoose, incluindo campos obrigatórios e seus tipos. Diga a ela se deve incorporar dados relacionados dentro do documento ou referenciá-los por id, com base nos padrões de acesso, e para adicionar índices nos campos que você consulta e ordena. Uma boa dica: peça à IA para usar objetos de consulta parametrizados, ou seja, nunca montar consultas colando texto bruto do usuário. Peça também que ela explique sua escolha entre incorporar e referenciar. Assim você entende os custos de leitura, escrita e atualização.

// Schema validation keeps documents consistent
db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "createdAt"],
      properties: {
        email:     { bsonType: "string" },
        createdAt: { bsonType: "date" },
        roles:     { bsonType: "array", items: { bsonType: "string" } }
      }
    }
  }
});

db.users.createIndex({ email: 1 }, { unique: true });

// Aggregation: count active users per role
db.users.aggregate([
  { $match: { active: true } },
  { $unwind: "$roles" },
  { $group: { _id: "$roles", count: { $sum: 1 } } }
]);