O modelo de documentos do MongoDB elimina a maior parte da cerimônia de schema que vem com bancos relacionais, mas introduz suas próprias regras de modelagem de dados, indexação e consultas. Se você vem do SQL e tenta usar no instinto, vai acabar com consultas lentas por razões que não são nada óbvias.
TL;DR: Uma referência prática de MongoDB cobrindo instalação, conexão, modelagem de dados e consultas, incluindo o aggregation pipeline.
Stack: MongoDB, Docker, mongo shell
Nível: Iniciante
Tempo de leitura: ~7 min
Instalando e conectando no Ubuntu
A forma mais rápida de colocar o MongoDB rodando localmente é via Docker. Sem configuração de repositório, sobe em segundos.
# Iniciar nova instância
docker run --name local_mongo -d -p 27017:27017 -p 28017:28017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123123 mongo
# String de conexão (funciona no MongoDB Compass)
"mongodb://admin:123123@localhost:27017/?authSource=admin"
Exemplo de coleção complexa
[
{
"itemId": "1234567890",
"itemName": "Laptop XYZ",
"category": "Eletrônicos",
"price": 999.99,
"inventory": [
{ "warehouse": "A", "quantity": 50 },
{ "warehouse": "B", "quantity": 25 }
],
"reviews": [
{ "userId": "user123", "rating": 5, "comment": "Excelente produto!" },
{ "userId": "user456", "rating": 4, "comment": "Bom, mas a bateria poderia durar mais." }
],
"sales": [
{ "date": "2023-10-26", "quantity": 10, "price": 999.99 },
{ "date": "2023-10-27", "quantity": 5, "price": 949.99 }
]
}
]
Exemplos de consultas
// Consulta simples por campo no 1o nivel
db.products.find({ category: "Eletrônicos" })
// Combinando condições
db.products.find({
$and: [
{ "inventory.warehouse": "A" },
{ "inventory.quantity": { $gt: 50 } }
]
})
// Correspondência parcial de texto
db.products.find({ itemName: { $regex: "Smart" } })
// Agregando e somando
db.products.aggregate([
{ $unwind: "$inventory" },
{
$group: {
_id: "$itemId",
totalQuantity: { $sum: "$inventory.quantity" }
}
}
])
O que você construiu
Uma referência funcional de MongoDB: como subir uma instância local, inserir documentos aninhados e consultá-los com filtros, regex e o aggregation pipeline. Os exemplos de agregação cobrem as duas operações que mais confundem quem vem do SQL: $unwind para arrays e $group para resumos.
Próximos passos
- Adicione índices nos campos que você mais consulta. Sem eles, o MongoDB vai varrer todos os documentos de bom humor, e em escala isso dói. Comece com
db.collection.createIndex({ field: 1 })e useexplain()para confirmar que os índices estão sendo usados. - Explore a API de change streams se precisar reagir a mudanças no banco em tempo real sem polling.
- Conecte pelo Python usando pymongo ou motor (async) e replique essas consultas programaticamente.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.