Curso
MongoDB é um banco de dados NoSQL que usa uma abordagem flexível, baseada em documentos, para armazenar dados em um documento parecido com JSON, organizado em coleções. Em resumo, isso significa que, ao trabalhar com MongoDB, seus dados ficam armazenados de um jeito muito parecido com JSON. Isso facilita a leitura, o mapeamento para o código e a escalabilidade. O MongoDB é moderno e segue uma abordagem diferente dos bancos relacionais. Bancos relacionais armazenam dados em linhas e tabelas. Essa abordagem tem vantagens, mas um grande desafio é criar relacionamentos usando tabelas extras. O MongoDB resolve esse problema ao adotar um esquema flexível, em que os dados são armazenados em coleções, e não em tabelas. Isso permite que dados relacionados a um objeto fiquem juntos com esse objeto. Neste tutorial, vamos explorar sete conceitos que quem está começando precisa conhecer ao usar o MongoDB. Dito isso, vamos lá.
Entendendo NoSQL e bancos de dados de documentos
Quando a maioria das pessoas pensa em bancos de dados, pensa em SQL, que armazena dados usando linhas, tabelas e relacionamentos. Isso funciona muito bem para muitos aplicativos, especialmente quando os dados do aplicativo são bem estruturados. Mas pode ser limitador quando os dados não se encaixam direitinho numa estrutura de tabela.
É aí que entra o NoSQL. NoSQL significa simplesmente “não apenas SQL”. É uma família de bancos de dados que foge do modelo rígido de tabelas para oferecer mais flexibilidade. Em vez de forçar todos os seus dados a caber em colunas predefinidas, você pode estruturá-los de um jeito que combine com o funcionamento real do seu aplicativo.
O MongoDB é um banco de dados de documentos, um dos tipos mais populares de bancos NoSQL. Em vez de linhas e tabelas, os dados são armazenados como documentos em coleções. Cada documento se parece muito com JSON, com pares chave-valor, arrays e até objetos aninhados. Isso facilita muito representar dados do mundo real. Um bom exemplo é um perfil de usuário com endereços e preferências em um único registro, sem precisar espalhar por várias tabelas. Veja como ficaria um perfil de usuário com endereços e preferências em um único registro no MongoDB.
{
"_id": "u123",
"name": "Moses Anu",
"email": "moses@example.com",
"addresses": [
{ "type": "home", "city": "Abuja" },
{ "type": "work", "city": "Lagos" }
],
"preferences": {
"language": "English",
"theme": "dark"
}
}
Noções básicas da arquitetura do MongoDB
Para trabalhar bem com o MongoDB, é importante entender como os dados são organizados em um banco MongoDB. Diferente dos bancos SQL, onde os dados ficam em tabelas e linhas, o MongoDB usa coleções e documentos.
- Database: pense nele como o contêiner de tudo. Assim como você pode ter vários bancos no MySQL, o MongoDB também oferece a flexibilidade de múltiplos bancos para projetos ou aplicativos diferentes.
- Collection: dentro de cada banco, você tem coleções. Pense em uma coleção como uma tabela com esquema bem flexível. Isso porque “tabelas” no MongoDB não impõem um esquema rígido. Você pode inserir documentos com campos diferentes na mesma coleção.
- Document: é aqui que a mágica acontece. Um documento é um objeto parecido com JSON (na verdade, BSON por baixo dos panos) que guarda seus dados. Documentos podem ter objetos e arrays aninhados, o que os torna muito mais naturais de usar em apps modernos. Vamos falar mais sobre BSON no próximo parágrafo.
Para entender melhor a arquitetura do MongoDB, vamos a um exemplo. Suponha que estamos criando um app simples de e-commerce usando MongoDB. Nossos dados seguiriam a estrutura abaixo.
- Ter um banco chamado shopDB.
- Dentro dele, uma coleção chamada products.
- E dentro dessa coleção, documentos representando cada produto com detalhes como nome, preço e categoria.
O esquema flexível
Para entender melhor o conceito de esquema flexível, no exemplo acima, um produto pode ter um campo de desconto e outro não. O MongoDB não obriga todos os produtos a terem exatamente os mesmos campos. Essa flexibilidade é um dos motivos pelos quais os desenvolvedores adoram o MongoDB, especialmente ao construir aplicativos que evoluem rápido.
BSON e tipos de dados
Se você já trabalhou com JSON, o MongoDB vai parecer bem natural. Na prática, o MongoDB não armazena seus dados como JSON puro. Ele usa algo chamado BSON. BSON significa Binary JSON.
O que é BSON e por que o MongoDB usa?
O BSON é como um primo do JSON, mais esperto e eficiente. Ele mantém a estrutura legível de pares chave-valor que os desenvolvedores adoram, mas adiciona alguns superpoderes:
- Suporta mais tipos de dados do que JSON (como datas, decimais e binário bruto).
- É otimizado para codificação/decodificação rápidas, o que acelera as consultas no MongoDB.
- Armazena tudo em um formato binário compacto, mais eficiente para grandes volumes de dados.
Basicamente, o BSON dá ao MongoDB a flexibilidade do JSON mais o desempenho e a precisão de que bancos de dados precisam.
Tipos de dados BSON mais comuns
O MongoDB suporta uma ampla variedade de tipos de dados, mas aqui estão os mais comuns e seus exemplos:
- String:
"name": "Alice" - Number:
"age": 28 - Boolean:
"isActive": true - Date:
"createdAt": ISODate("2025-08-18T10:00:00Z") - Array:
"skills": ["MongoDB", "Node.js", "React"] - Documento incorporado: objetos aninhados dentro de documentos:
"address": {
"city": "Lagos",
"country": "Nigeria"
}
- ObjectId: tipo especial de ID que o MongoDB usa para identificadores únicos de documentos.
ObjectId("64f5c9e8a5f76b1d2c3a4567")
Veja um exemplo de documento de perfil de usuário em formato BSON armazenado no MongoDB:
{
"_id": ObjectId("64f5c9e8a5f76b1d2c3a4567"),
"name": "Moses",
"age": 30,
"isActive": true,
"skills": ["Laravel", "MongoDB", "Vue"],
"address": {
"city": "Abuja",
"country": "Nigeria"
},
"createdAt": ISODate("2025-08-18T10:00:00Z")
}
Alguns pontos importantes:
- O campo
_idé gerado automaticamente como umObjectIdse você não definir um. - Datas são armazenadas como
ISODate, não apenas strings. - O documento
addressaninhado e o arrayskillsmostram a flexibilidade do MongoDB em comparação a linhas planas de SQL.
Princípios de design de esquema
O MongoDB permite evoluir seu modelo de dados conforme seu aplicativo cresce, graças ao esquema flexível. Porém, sem um bom design de esquema, a flexibilidade do MongoDB pode virar bagunça rapidamente. Não é porque o MongoDB tem esquema flexível que você deve abrir mão de estrutura. Vamos ver alguns princípios de design de esquema para usar ao trabalhar com MongoDB.
Esquema flexível vs. sem esquema
Muitas vezes o MongoDB é descrito como sem esquema, mas isso é um pouco enganoso. Todo documento tem um esquema — ele só não é aplicado no nível do banco, a menos que você opte por adicionar regras de validação.
Por exemplo, dois documentos na mesma coleção users podem, tecnicamente, ser bem diferentes:
// Document 1
{ "name": "Alice", "email": "alice@example.com" }
// Document 2
{ "username": "Bob123", "age": 29 }
Essa flexibilidade é ótima durante prototipagem rápida, mas em produção você geralmente vai querer alguma consistência. É aí que entra a validação com JSON Schema. Você pode impor regras para não acabar com dados bagunçados e pouco confiáveis.
Incorporar vs. referenciar documentos
Outra decisão importante no design de esquema do MongoDB é como modelar relacionamentos. Vamos ver algumas formas de modelar relacionamentos em um documento MongoDB.
Incorporação (aninhando dados dentro de um documento)
O MongoDB permite incorporar documentos dentro de uma coleção. Essa abordagem é melhor para dados acessados juntos. Um exemplo é um post de blog com seus comentários armazenados diretamente nele. Veja um exemplo de incorporação:
{
"title": "Intro to MongoDB",
"comments": [
{ "user": "Alice", "text": "Great post!" },
{ "user": "Bob", "text": "Very helpful." }
]
}
Dados armazenados assim costumam ter melhor performance e exigem menos consultas para recuperar ou manipular. Se não for bem estruturado, porém, pode gerar documentos “inchados”.
Referência (vinculando entre documentos)
Quando o tamanho dos dados relacionados cresce muito ou são reutilizados com frequência, é recomendável vincular dados entre documentos. Isso é conhecido como referência.
Um exemplo é um post de blog com muitos comentários. Nessa situação, podemos armazenar apenas os IDs dos comentários, e os comentários em si ficam em sua própria coleção. O código abaixo mostra essa abordagem.
// Blog post
{ "title": "Intro to MongoDB", "commentIds": [ObjectId("..."), ObjectId("...")] }
// Documento de comentário separado
{ "_id": ObjectId("..."), "user": "Alice", "text": "Great post!" }
Estruturar os dados desse jeito mantém os documentos menores, evita duplicação e deixa o código mais fácil de manter. Porém, exige múltiplas consultas (embora você possa usar junções com $lookup em agregações).
Evitando erros comuns de design de esquema
Excesso de incorporação: como o MongoDB tem esquema flexível, é fácil querer colocar tudo em um documento gigante. Isso não é recomendável e pode prejudicar o desempenho. O MongoDB impõe um tamanho máximo de 16 MB por documento para incentivar uma estruturação adequada.
Ignorar índices: não ignore índices ao trabalhar com MongoDB. Se suas consultas não estiverem alinhadas ao design do esquema, você terá buscas lentas. Sempre projete pensando nos padrões de acesso.
Tratar o MongoDB como SQL: não há problema em dividir dados em documentos menores. Mas entenda que o MongoDB tem esquema flexível e não o trate como um banco relacional. Se você simplesmente copiar seu esquema relacional 1:1 para o MongoDB (muitas coleções/tabelas pequenas e normalizadas), vai perder as vantagens do modelo de documentos.
Dedique tempo para planejar seus esquemas. Um esquema bem pensado impacta diretamente a performance do seu aplicativo.
Validação de dados
O MongoDB é flexível. Isso pode facilmente levar a dados desestruturados e desorganizados se não houver cuidado. É aqui que entra a validação de dados.
Pense na validação como regras básicas para suas coleções. Ela garante que qualquer documento inserido ou atualizado siga certas regras, como exigir um campo de e-mail ou garantir que “age” seja sempre um número.
Usando validação com JSON Schema no MongoDB
O MongoDB oferece suporte a JSON Schema para validação. JSON Schema é um padrão para descrever o formato dos seus documentos. Algumas regras que podem ser aplicadas incluem:
- Campos obrigatórios.
- Tipos de dados (string, number, date, etc.).
- Faixas de valor ou padrões de string.
A validação de dados pode nos dar o melhor dos dois mundos ao trabalhar com MongoDB: o esquema flexível do MongoDB mais trilhos de segurança para manter os dados limpos.
Aplicando regras para manter os dados limpos
Vamos supor que temos uma coleção de usuários. Queremos garantir que:
- Todo usuário tenha um nome (string).
- Todo usuário tenha um e-mail (string, com formato de e-mail).
- Se existir idade, deve ser um número maior ou igual a 18.
Veja como podemos aplicar isso com um validador JSON Schema:
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+\\..+$",
description: "must be a valid email address"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer greater than or equal to 18"
}
}
}
}
})
O MongoDB garante que apenas dados validados sejam salvos na coleção.
Operações CRUD
No dia a dia com MongoDB, tudo gira em torno de quatro operações básicas: create, read, update e delete — o famoso CRUD.
Se você domina CRUD, consegue construir praticamente qualquer aplicação. O MongoDB simplifica isso com alguns métodos intuitivos. Vamos passar por eles.
Create
Para adicionar um novo documento a uma coleção no MongoDB, use o método insertOne(). Por exemplo, podemos criar um novo documento de usuário na coleção user com o código abaixo.
db.users.insertOne({
name: "Alice",
email: "alice@example.com",
age: 25
})
O MongoDB gera automaticamente um _id exclusivo para cada documento criado.
Read
Ler dados de uma coleção é direto. Basta usar find(). Dá para obter todos os documentos ou filtrar com condições. O código abaixo encontra todos os usuários de uma coleção.
// Find all users
db.users.find()
Podemos filtrar usando uma chave única — o e-mail, por exemplo.
// Find one user by email
db.users.find({ email: "alice@example.com" })
find() sempre retorna um cursor (que você pode iterar). Se você quer apenas uma correspondência, use findOne().
Update
Depois que os dados são criados, pode ser necessário modificá-los. Para isso, use o método updateOne(). Especificamos um filtro e as mudanças a aplicar.
// Atualizar a idade da Alice
db.users.updateOne(
{ email: "alice@example.com" },
{ $set: { age: 26 } }
)
O operador $set atualiza apenas o campo especificado, mantendo o resto do documento inalterado.
Delete
Por fim, podemos remover documentos com deleteOne() ou deleteMany(). O exemplo abaixo mostra uma ação deleteOne.
// Excluir o registro da Alice
db.users.deleteOne({ email: "alice@example.com" })
Lembre-se de que exclusões são permanentes.
Com apenas essas quatro operações, você consegue construir desde apps de tarefas até plataformas de e-commerce.
Boas práticas de segurança
Segurança nunca deve ser um pensamento tardio quando o assunto é banco de dados. Dito isso, vamos ver as práticas essenciais que todo iniciante precisa conhecer.
Autenticação e autorização
Por padrão, uma instalação nova do MongoDB pode não forçar autenticação. Isso significa que qualquer pessoa que conseguir se conectar pode potencialmente acessar seus dados. Isso é um grande risco se não for tratado. Para garantir que seu MongoDB não fique aberto, implemente autenticação e autorização.
- Autenticação garante que apenas usuários válidos possam se conectar.
- Autorização garante que, mesmo autenticados, os usuários só executem as ações permitidas.
Por exemplo, em vez de entrar como root/admin em todo lugar, crie usuários dedicados para tarefas específicas.
// Criar um novo usuário com acesso somente leitura
db.createUser({
user: "reportViewer",
pwd: "strongPassword123",
roles: [ { role: "read", db: "salesDB" } ]
})
Agora, esse usuário pode apenas ler dados do salesDB, não escrever ou excluir.
Controle de acesso baseado em papéis (RBAC)
O MongoDB usa papéis para gerenciar o que os usuários podem fazer. Alguns papéis internos incluem:
- Read: usuários com esse privilégio podem apenas visualizar dados.
- ReadWrite: podem visualizar e modificar dados.
- DbAdmin: podem gerenciar índices, estatísticas e profiling.
- Root: controle total. Evite usar no dia a dia!
Seguir o princípio do menor privilégio dá ao usuário apenas o necessário para fazer seu trabalho, mantendo o banco MongoDB seguro.
Evite exposição pública
Um erro comum de iniciantes é deixar o MongoDB ouvindo na porta padrão (27017) e vinculado a 0.0.0.0 (todas as interfaces de rede).
Isso deixa seu banco exposto para toda a internet. Para evitar, tome as seguintes medidas:
- Vincule o MongoDB apenas ao
localhostou a um IP privado/interno. - Use um firewall (ou security group na nuvem) para restringir o acesso.
- Sempre conecte via VPN ou túnel SSH se precisar de acesso remoto.
# Exemplo: /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1 # Acessível apenas localmente
Com essas práticas, sua implantação do MongoDB fica muito mais protegida contra vazamentos acidentais ou ataques maliciosos.
Conclusão
O MongoDB conquistou seu espaço entre os principais bancos para aplicações modernas por sua flexibilidade e potência. Seja em um projeto pessoal ou em um sistema em larga escala, dominar os fundamentos vai economizar muito tempo e aumentar sua produtividade. Neste artigo, exploramos sete conceitos essenciais para quem está começando com MongoDB. Eles incluem:
- Entender NoSQL e bancos de documentos.
- Noções básicas da arquitetura do MongoDB.
- BSON e tipos de dados.
- Princípios de design de esquema.
- Validação de dados.
- Operações CRUD.
- Boas práticas de segurança.
Entender bem os conceitos acima vai te dar uma base sólida para trabalhar com MongoDB. Para mais detalhes, confira a documentação do MongoDB e o curso Introduction to MongoDB in Python da DataCamp.
FAQs
Qual é a diferença entre bancos de dados NoSQL e SQL?
Bancos NoSQL como o MongoDB armazenam dados em formatos flexíveis, orientados a documentos, enquanto bancos SQL usam tabelas estruturadas com esquemas fixos.
Como funciona a arquitetura do MongoDB?
O MongoDB usa uma arquitetura distribuída e escalável, com componentes como replica sets para alta disponibilidade e sharding para escalabilidade horizontal.
O que é BSON e por que o MongoDB o utiliza?
BSON (Binary JSON) é o formato de dados do MongoDB, projetado para armazenar com eficiência documentos semelhantes a JSON e suportar tipos adicionais de dados.
Por que o design de esquema é importante no MongoDB?
Mesmo que o MongoDB seja flexível quanto a esquema, um design cuidadoso garante consultas eficientes, menos redundância e melhor performance do aplicativo.
Como posso proteger meu banco de dados MongoDB sendo iniciante?
Você pode habilitar autenticação, usar controle de acesso baseado em papéis, impor conexões TLS/SSL e atualizar o MongoDB regularmente para se proteger contra vulnerabilidades.

Engenheiro de Software

