MongoDB é NoSQL document-oriented. Flexível, escalável, JSON nativo. Ideal para dados não-estruturados e crescimento rápido.
Conceitos Principais
Documents
JSON (BSON). Schemaless. Nested documents e arrays. { _id: ObjectId, name: "John", tags: ["dev"] }.
Collections
Grupo de documents. Equivalente a table SQL. Sem schema enforced. Flexível.
Aggregation Pipeline
Processa dados. $match, $group, $sort, $project. Pipeline de transformações.
Indexes
Single field, compound, text, geospatial. Acelera queries. createIndex().
Passo a Passo
- Instale MongoDB: Mac: brew install mongodb-community. Docker: docker run -p 27017:27017 mongo:7. mongosh para CLI.
- CRUD Básico: use myapp; db.users.insertOne({name: "John", email: "..."}); db.users.find({name: "John"}); db.users.updateOne({name: "John"}, {$set: {email: "..."}}); db.users.deleteOne({name: "John"});
- Node.js Driver: npm install mongodb. const { MongoClient } = require("mongodb"); const client = new MongoClient(uri); const db = client.db("myapp"); const users = db.collection("users");
- Aggregation: db.orders.aggregate([{ $match: { status: "completed" }}, { $group: { _id: "$userId", total: { $sum: "$amount" }}}, { $sort: { total: -1 }}]);
- Indexes: db.users.createIndex({ email: 1 }, { unique: true }); db.posts.createIndex({ tags: 1 }). Explique query: db.users.find({email: "..."}).explain();
Boas Praticas
Recomendacoes
• Embed relacionamentos 1-to-few
• Reference relacionamentos 1-to-many
• Índices em queries frequentes
• Denormalize para performance
• Limit e skip para pagination
• Connection pooling
Erros Comuns
Evite estes erros
• Normalizar como SQL (anti-pattern)
• Não criar índices
• Schemas muito nested (>100 levels)
• Não usar aggregation (client-side processing)
• Expor MongoDB direto ao client
Checklist
- MongoDB instalado
- Collections criadas
- CRUD funcionando
- Driver Node.js configurado
- Índices criados
- Aggregation testada