SQL para NoSQL

Cole uma única instrução SQL SELECT e o conversor a reescreve como uma consulta find() equivalente do MongoDB. Ele mapeia as colunas selecionadas para uma projeção, a cláusula WHERE para um filtro, ORDER BY para .sort() e LIMIT para .limit(). É um reescritor de consultas para instruções simples, não uma ferramenta de migração: JOIN, GROUP BY, agregações e subconsultas não são suportados.

Como a conversão funciona

  1. 1

    Analisar o SELECT

    A ferramenta lê uma única instrução no formato `SELECT colunas FROM tabela [WHERE ...] [ORDER BY ...] [LIMIT n]`.

  2. 2

    Mapear cada cláusula

    As colunas viram uma projeção `{ col: 1 }`, `WHERE` vira um filtro, `ORDER BY` vira `.sort()` e `LIMIT` vira `.limit()`.

  3. 3

    Traduzir os operadores

    Os operadores de comparação são mapeados para operadores do Mongo: `>` para `$gt`, `<` para `$lt`, `>=` para `$gte`, `<=` para `$lte`, `!=` para `$ne`, e `=` para uma correspondência direta.

  4. 4

    Copiar a saída

    A linha `db.collection.find(...)` gerada está pronta para colar no shell mongosh ou em uma chamada de driver.

Um exemplo prático

SQL:

SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC LIMIT 5;

Consulta do MongoDB:

db.products.find({ price: { $gt: 100 } }, { name: 1, price: 1 }).sort({ price: -1 }).limit(5)

O que o conversor mapeia

SQL MongoDB find()
SELECT a, b projeção { a: 1, b: 1 }
SELECT * todos os campos (projeção vazia)
FROM users db.users.find(...)
WHERE a = 5 { a: 5 }
WHERE a > 5 { a: { $gt: 5 } }
WHERE a >= 5 { a: { $gte: 5 } }
WHERE a != 5 { a: { $ne: 5 } }
WHERE a AND b { a: ..., b: ... }
WHERE a OR b { $or: [ ... ] }
ORDER BY a DESC .sort({ a: -1 })
LIMIT 10 .limit(10)

O que não é suportado

  • JOINs. Apenas uma tabela é lida. Combinar coleções exige $lookup ou um modelo de dados desnormalizado, o que é uma decisão de esquema, não uma reescrita de consulta.
  • GROUP BY e agregações. COUNT, SUM, AVG e GROUP BY exigem o pipeline de agregação (db.collection.aggregate([...])), que esta ferramenta não gera.
  • Subconsultas, CTEs e funções de janela. Repense o modelo ou divida o trabalho em etapas; elas não podem ser expressas em um find().
  • IN, LIKE e BETWEEN. O analisador de WHERE trata apenas os operadores de comparação =, >, <, >=, <=, != e <>.
  • Misturar AND e OR. Uma cláusula WHERE é tratada como toda AND ou toda OR; não combine ambos na mesma instrução.
  • INSERT, UPDATE, DELETE, CREATE TABLE. Apenas SELECT é convertido.

Sobre a saída

O resultado é sempre uma única linha db.collection.find(filtro, projeção), opcionalmente seguida de .sort() e .limit(). Ela é destinada ao shell e aos drivers do MongoDB. Não produz consultas do Firestore ou do Elasticsearch, e não escolhe índices nem otimiza o desempenho. Teste a consulta com seus próprios dados antes de confiar nela.

Perguntas frequentes

Não. A saída é sempre uma consulta find() do MongoDB para o shell mongosh ou um driver. Não há seletor de destino para outros armazenamentos de documentos.

Não. Isso exige o pipeline de agregação do MongoDB (aggregate([...])), que esta ferramenta não gera. Ela só produz consultas find() com filtro, projeção, ordenação e limite.

Não. Apenas uma tabela FROM é lida. Armazenamentos NoSQL favorecem embutir ou referenciar, então um JOIN geralmente implica uma mudança no modelo de dados, não uma reescrita da consulta.

Não. Apenas instruções SELECT são convertidas. As coleções do MongoDB não têm esquema por padrão, então não há definição de tabela a traduzir.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas