⏱️4 min read · 693 words
MongoDB é o banco de dados NoSQL mais popular do mundo. Em 2026, o MongoDB 8.0 traz grandes melhorias de desempenho e melhores ferramentas para desenvolvedores. Este guia completo cobre tudo, desde o seu primeiro documento até a arquitetura MongoDB de nível de produção.
📋 Table of Contents
Por que MongoDB?
- Esquema flexível— sem migrações para modelos de dados em evolução
- Documentos semelhantes a JSON— ajuste natural para APIs JavaScript/Python
- Escala horizontal— fragmentação integrada para dados massivos
- Linguagem de consulta rica— pipelines de agregação rivalizam com SQL para análise
- Pesquisa vetorial do Atlas— pesquisa semântica para aplicações de IA
Instalação
# macOS
brew tap mongodb/brew && brew install mongodb-community@8.0
brew services start mongodb-community@8.0
# Ubuntu 24.04
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
sudo apt update && sudo apt install -y mongodb-org
sudo systemctl start mongod
# Connect to shell
mongosh
Principais operações CRUD
// Switch database
use techpulse_db
// INSERT
db.users.insertOne({
name: "Alice",
email: "alice@example.com",
skills: ["Python", "React"],
createdAt: new Date()
})
db.posts.insertMany([
{ title: "React Guide", views: 1500, tags: ["react", "js"] },
{ title: "Python Guide", views: 2300, tags: ["python", "backend"] }
])
// FIND
db.users.find({ skills: "Python" }) // match array element
db.posts.find(
{ views: { $gt: 1000 } }, // filter
{ title: 1, views: 1, _id: 0 } // projection
)
// UPDATE
db.users.updateOne(
{ email: "alice@example.com" },
{ $set: { role: "senior" }, $push: { skills: "Go" } }
)
db.posts.updateMany(
{ tags: "python" },
{ $inc: { views: 100 } }
)
// DELETE
db.users.deleteOne({ email: "alice@example.com" })
Índices de Desempenho
// Check slow queries
db.posts.find({ title: "React Guide" }).explain("executionStats")
// Create indexes
db.users.createIndex({ email: 1 }, { unique: true })
db.posts.createIndex({ tags: 1, views: -1 }) // compound
db.articles.createIndex({ title: "text" }) // full-text search
db.events.createIndex({ createdAt: 1 },
{ expireAfterSeconds: 2592000 }) // TTL: 30 days
// Always create indexes before going to production
db.users.getIndexes()
Pipeline de agregação
// Sales report: revenue by category
db.orders.aggregate([
{ $match: { status: "completed", createdAt: { $gte: new Date("2026-01-01") } } },
{ $unwind: "$items" },
{ $group: {
_id: "$items.category",
totalRevenue: { $sum: { $multiply: ["$items.price", "$items.qty"] } },
count: { $sum: 1 }
}},
{ $sort: { totalRevenue: -1 } },
{ $limit: 10 },
{ $project: { category: "$_id", revenue: { $round: ["$totalRevenue", 2] }, _id: 0 }}
])
Python com PyMongo e Motor (Async)
from pymongo import MongoClient, ASCENDING
from datetime import datetime
# Sync
client = MongoClient("mongodb://localhost:27017/")
db = client.techpulse_db
users = db.users
result = users.insert_one({"name": "Alice", "createdAt": datetime.utcnow()})
alice = users.find_one({"name": "Alice"}, {"_id": 0})
users.update_one({"name": "Alice"}, {"$set": {"active": True}})
# Async with Motor (for FastAPI)
import motor.motor_asyncio
async_client = motor.motor_asyncio.AsyncIOMotorClient("mongodb://localhost:27017")
async_db = async_client.techpulse_db
async def create_user(data: dict) -> str:
result = await async_db.users.insert_one(data)
return str(result.inserted_id)
async def list_users(page: int = 1) -> list:
cursor = async_db.users.find().skip((page-1)*20).limit(20)
return await cursor.to_list(length=20)
Modelagem de dados: incorporação versus referência
// Embed when reading together (1-to-few)
{
_id: ObjectId("..."),
title: "MongoDB Guide",
author: { name: "Alice", email: "alice@blog.com" }, // embedded
tags: ["mongodb", "nosql"] // embedded
}
// Reference when shared/large (1-to-many)
// posts: { authorId: ObjectId("user1") }
// Look up with $lookup
db.posts.aggregate([
{ $lookup: {
from: "users",
localField: "authorId",
foreignField: "_id",
as: "author"
}},
{ $unwind: "$author" }
])
Melhores práticas de produção
- Use conjuntos de réplicas— mínimo de 3 nós para HA
- Habilitar autenticação— nunca execute o MongoDB sem autenticação
- Validar documentos– use esquema JSON ou Pydantic
- Monitore consultas lentas— habilitar profiler, usar monitoramento Atlas
- Limitar o tamanho do documento– fique bem abaixo do limite de 16 MB BSON
- Atlas para produção— serviço gerenciado com backups, escalonamento, monitoramento
# Atlas connection
MONGO_URI = "mongodb+srv://user:pass@cluster.mongodb.net/mydb?retryWrites=true&w=majority"
client = MongoClient(MONGO_URI)
MongoDB 8.0 em 2026 é o melhor banco de dados de documentos para aplicações flexíveis e rápidas. Comece de forma simples, crie índices adequados e use o pipeline de agregação para análises. Combine com o Atlas Vector Search para pesquisa semântica baseada em IA em seus aplicativos.
🔗 Share this article
✍️ Leave a Comment