Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender o modelo de documentos e coleções do MongoDB
- Fazer as operações básicas de inserir e buscar com o driver oficial do Node.js
- Saber quando o MongoDB é boa escolha e quando outro banco serve melhor
Nesta página
O MongoDB aparece com frequência em projetos de bots, APIs e aplicações web. Em vez de tabelas rígidas, ele guarda cada registro como um documento: uma estrutura de campos e valores com cara de objeto JSON. Isso combina com linguagens como JavaScript e Python, em que os dados já circulam como objetos.
Se você ainda está comparando opções, qual banco de dados escolher compara o MongoDB com as alternativas.
O que é um banco de dados orientado a documentos?#
Em um banco relacional, você define tabelas com colunas fixas e todo registro segue o mesmo formato. Em um banco orientado a documentos, cada registro é um documento, e documentos da mesma coleção podem ter campos diferentes.
Um documento do MongoDB parece com isto:
{
_id: ObjectId("507f1f77bcf86cd799439011"),
nome: "Alice",
nascimento: ISODate("1990-01-01T00:00:00Z"),
endereco: { cidade: "Goiânia", estado: "GO" },
interesses: ["leitura", "trilha", "código"]
}Os valores podem ser textos, números, datas, outros documentos (como endereco) ou listas (como interesses). Guardar o endereço dentro do documento da pessoa evita um join: uma única leitura traz tudo.
Como o MongoDB organiza os dados?#
Quatro conceitos cobrem quase tudo:
- Documento: um registro, com pares de campo e valor. Todo documento tem um
_idúnico, que o MongoDB cria se você não informar. - Coleção: um grupo de documentos, equivalente a uma tabela, mas sem esquema obrigatório.
- Banco (database): um conjunto de coleções.
- BSON: o formato binário em que o MongoDB armazena os documentos. Ele estende o JSON com tipos como
ObjectId, datas e dados binários.
Se você quiser impor regras (campos obrigatórios, tipos), pode adicionar validação de esquema à coleção. A flexibilidade é uma escolha, não uma obrigação.
Como o MongoDB funciona por dentro?#
Três recursos definem a arquitetura, segundo o manual oficial:
- Replicação com failover automático: os dados são copiados entre vários servidores (um conjunto de réplicas). Se o servidor primário cai, os outros elegem um novo.
- Sharding: a divisão dos dados entre máquinas por uma chave, para escalar na horizontal quando um servidor só não dá conta.
- Transações ACID: operações em vários documentos que valem por inteiro ou não valem, inclusive em clusters particionados.
Na prática, um projeto pequeno roda num único servidor. Replicação e sharding entram quando o volume de dados ou a exigência de disponibilidade crescem.
Como usar o MongoDB com Node.js?#
Instale o driver oficial e guarde a string de conexão em uma variável de ambiente, nunca no código:
npm install mongodbconst { MongoClient } = require("mongodb");
const client = new MongoClient(process.env.MONGODB_URI);
async function main() {
try {
await client.connect();
const usuarios = client.db("app").collection("usuarios");
const { insertedId } = await usuarios.insertOne({ nome: "Ada", cargo: "engenheira" });
console.log("Inserido:", insertedId);
const encontrados = await usuarios.find({ cargo: "engenheira" }).toArray();
console.log("Encontrados:", encontrados);
} finally {
await client.close();
}
}
main().catch(console.error);A coleção usuarios não precisa existir antes: o MongoDB a cria na primeira inserção. Para consultas rápidas em campos que você filtra com frequência, crie um índice com createIndex. Sem índice, o banco lê a coleção inteira a cada busca.
Para que serve o MongoDB?#
O MongoDB funciona bem quando os dados têm formato variável ou são lidos em bloco:
- Perfis e configurações de usuários: cada usuário pode ter campos diferentes.
- Bots: configurações por servidor, preferências e economia virtual, em que cada registro é um objeto.
- Catálogos de produtos: itens com atributos distintos por categoria.
- Eventos e logs: muitos registros de formato parecido, mas que evoluem.
- Prototipagem rápida: o esquema muda sem migrações.
Quando não usar o MongoDB?#
Evite ou reconsidere nestes casos:
- Dados muito relacionados: se você faz joins constantes entre várias entidades, um banco relacional como o PostgreSQL costuma ser mais natural.
- Documentos muito grandes: o limite é de 16 MiB por documento, e o aninhamento vai até 100 níveis. Arquivos grandes pertencem a um armazenamento de objetos, com a URL guardada no documento.
- Transações longas: o padrão é 60 segundos por transação.
- Cache de acesso muito rápido: um banco em memória como o Redis atende melhor.
A flexibilidade também cobra um preço: sem esquema, um erro de digitação no nome de um campo passa despercebido. Defina convenções e, se precisar, ative a validação.
Que termos aparecem junto com MongoDB?#
- NoSQL: nome genérico para bancos que não usam tabelas relacionais.
- Atlas: o serviço de nuvem da própria MongoDB, Inc. Você também pode hospedar o MongoDB por conta própria ou em outros provedores.
- Mongoose: biblioteca do Node.js que adiciona esquemas e modelos sobre o driver.
- Aggregation pipeline: linguagem do MongoDB para filtrar, agrupar e transformar dados em etapas.
- GridFS: recurso para guardar arquivos maiores que 16 MiB dividindo-os em partes.
Quando chegar a hora de colocar o banco no ar, como hospedar um banco de dados mostra o caminho.
Como fazer isso na Square Cloud#
Na Square Cloud, a hospedagem de MongoDB começa no plano Standard; o Hobby não inclui bancos. Você cria o banco pelo painel, sempre em uma versão recente, e ele fica pronto em segundos. O banco roda no mesmo datacenter das suas aplicações, com latência média de cerca de 1 ms, como nó único (standalone, sem replica set) e com TLS obrigatório.
Para conectar a aplicação, copie a URL de conexão completa que o painel entrega, salve como variável de ambiente (a MONGODB_URI do exemplo acima) e reinicie a aplicação. Baixe também o certificado: o cliente precisa confiar na CA e apresentar o .pem.
Você tira snapshots manuais quando quiser, e todo plano com bancos inclui também um snapshot automático diário. Você pode restaurar um snapshot no mesmo banco, em outro do mesmo motor ou num banco novo, ou baixá-lo como .zip.
Veja detalhes e planos em Hospedagem de MongoDB.
Hospedagem de bancos
MongoDB, PostgreSQL, MySQL e Redis no mesmo datacenter do app
Perguntas frequentes
MongoDB é SQL ou NoSQL?
É NoSQL, do tipo orientado a documentos. Em vez de tabelas com linhas e colunas, guarda documentos em coleções, e as consultas usam a API e a linguagem de agregação do próprio MongoDB, não SQL.
O MongoDB tem transações?
Sim. Ele oferece transações ACID com vários documentos, inclusive em clusters particionados (sharded). Por padrão, uma transação tem limite de 60 segundos de duração.
Qual o tamanho máximo de um documento no MongoDB?
16 MiB por documento BSON. Para arquivos maiores, a documentação indica o GridFS, ou você pode guardar o arquivo em um armazenamento de objetos e salvar só a URL no documento.
MongoDB é melhor que PostgreSQL?
Nenhum é melhor em tudo. O MongoDB combina com dados de formato variável e leitura de um documento inteiro por vez. O PostgreSQL combina com dados muito relacionados e consultas com muitos joins.
Mais em Bancos de dados
Ver todos os 24 artigos- Quanto custa um banco de dados na nuvem?Um banco de dados na nuvem custa de zero a centenas de dólares por mês. Veja o que define o preço: instância, disco, tráfego, snapshots e como estimar o seu.
- Como hospedar um banco de dados (e conectar sua aplicação)Para hospedar um banco de dados, escolha o motor, crie a instância, guarde a string de conexão em variável de ambiente e teste a conexão. Veja o passo a passo.
- O que é Redis e para que serveRedis é um banco de dados em memória que guarda pares chave-valor e estruturas de dados. Veja como funciona, para que serve e quando não usar.
- Como fazer backup do banco de dados (MySQL, PostgreSQL, MongoDB)Faça backup de MySQL, PostgreSQL e MongoDB com mysqldump, pg_dump e mongodump, e restaure o dump. Veja os comandos, como verificar e os erros comuns.