MongoDB (NoSQL)

Monte comandos do MongoDB com cliques, formate e aprenda a equivalência com SQL

Clique em um comando para inseri-lo no editor, na posição do cursor. Sintaxe do mongosh.

// O resultado aparecerá aqui...

Ajuda: MongoDB e NoSQL

Como usar esta ferramenta
  • 1. Escolha uma categoria e clique no comando: ele é inserido no editor na posição do cursor.
  • 2. Troque os nomes de exemplo (clientes, pedidos, email...) pelos nomes das suas coleções e campos.
  • 3. Clique em Formatar para organizar a indentação. A ferramenta também avisa se faltar fechar chaves, colchetes, parênteses ou aspas.
  • 4. Copie e execute no mongosh, no MongoDB Compass (aba Mongosh) ou adapte para o driver da sua linguagem.
  • Os comandos usam a sintaxe do mongosh (shell oficial do MongoDB). Nada é executado nem enviado para servidor.
Conceitos do MongoDB
  • Banco (database): agrupa coleções, como no SQL.
  • Coleção (collection): conjunto de documentos, equivale a uma tabela, mas sem estrutura fixa.
  • Documento: registro em formato JSON/BSON, equivale a uma linha. Pode ter objetos e arrays dentro.
  • _id: identificador único de todo documento. Se você não informar, o MongoDB gera um ObjectId.
  • BSON: formato binário do JSON com tipos extras (ObjectId, Date, Decimal128, Int32, Int64...).
  • Schema flexível: documentos da mesma coleção podem ter campos diferentes. Use validação ($jsonSchema) quando precisar de regras.
Equivalência SQL x MongoDB
SQLMongoDB
BancoBanco
TabelaColeção
LinhaDocumento
ColunaCampo
Chave primária_id
JOIN$lookup ou documento embutido
WHEREfiltro do find() / $match
GROUP BY$group
ORDER BYsort() / $sort
LIMIT / OFFSETlimit() / skip()
ÍndicecreateIndex()
Transaçãosession.startTransaction()
Exemplos convertidos de SQL para MongoDB
SQLMongoDB
SELECT * FROM clientes WHERE uf = 'GO'db.clientes.find({ uf: "GO" })
SELECT nome, email FROM clientesdb.clientes.find({}, { nome: 1, email: 1, _id: 0 })
SELECT * FROM produtos WHERE preco > 100 ORDER BY preco DESC LIMIT 5db.produtos.find({ preco: { $gt: 100 } }).sort({ preco: -1 }).limit(5)
SELECT COUNT(*) FROM clientes WHERE ativo = 1db.clientes.countDocuments({ ativo: true })
INSERT INTO clientes (nome) VALUES ('Ana')db.clientes.insertOne({ nome: "Ana" })
UPDATE clientes SET ativo = 0 WHERE uf = 'SP'db.clientes.updateMany({ uf: "SP" }, { $set: { ativo: false } })
DELETE FROM pedidos WHERE status = 'cancelado'db.pedidos.deleteMany({ status: "cancelado" })
SELECT status, SUM(valor) FROM pedidos GROUP BY statusdb.pedidos.aggregate([{ $group: { _id: "$status", total: { $sum: "$valor" } } }])
SELECT * FROM clientes WHERE nome LIKE 'Jo%'db.clientes.find({ nome: { $regex: "^Jo" } })
Modelagem: embutir ou referenciar?
  • Embutir (documento dentro de documento) quando os dados são lidos juntos e pertencem ao pai. Ex.: endereço do cliente, itens do pedido.
  • Referenciar (guardar o _id de outro documento) quando os dados crescem sem limite, são compartilhados ou mudam com frequência. Ex.: pedidos do cliente, produtos do pedido.
  • Um documento tem limite de 16 MB: não embuta arrays que crescem indefinidamente (ex.: todos os logs de um usuário).
  • Modele pensando nas consultas mais frequentes da aplicação, não na normalização como no SQL.
Boas práticas
  • Antes de updateMany ou deleteMany, rode um find() com o mesmo filtro para conferir o que será afetado.
  • Crie índices para os campos usados em filtros e ordenações frequentes; confira com explain("executionStats").
  • Use projeção para trazer só os campos necessários.
  • Prefira $regex com string ("^jo") a regex literal /jo/: é mais portável entre shell e drivers, e buscas que começam com ^ usam índice.
  • Valores monetários: use NumberDecimal (Decimal128), não double.
  • Em aplicações, nunca monte filtros concatenando texto digitado pelo usuário; valide os tipos para evitar injeção de operadores ($where, $ne...).
Outros bancos NoSQL
TipoExemplosUso típico
DocumentoMongoDB, CouchDB, FirestoreCadastros, catálogos, conteúdo flexível
Chave-valorRedis, DynamoDBCache, sessões, filas, contadores
ColunarCassandra, HBaseGrandes volumes de escrita, séries temporais
GrafoNeo4j, Amazon NeptuneRedes sociais, recomendações, rotas
BuscaElasticsearch, OpenSearchBusca textual, logs e analytics