SQL a NoSQL

Pega una sola sentencia SQL SELECT y el conversor la reescribe como una consulta find() equivalente de MongoDB. Asigna las columnas seleccionadas a una proyección, la cláusula WHERE a un filtro, ORDER BY a .sort() y LIMIT a .limit(). Es un reescritor de consultas para sentencias sencillas, no una herramienta de migración: no admite JOIN, GROUP BY, agregaciones ni subconsultas.

Cómo funciona la conversión

  1. 1

    Analizar el SELECT

    La herramienta lee una sola sentencia con la forma `SELECT columnas FROM tabla [WHERE ...] [ORDER BY ...] [LIMIT n]`.

  2. 2

    Asignar cada cláusula

    Las columnas se convierten en una proyección `{ col: 1 }`, `WHERE` en un filtro, `ORDER BY` en `.sort()` y `LIMIT` en `.limit()`.

  3. 3

    Traducir los operadores

    Los operadores de comparación se asignan a operadores de Mongo: `>` a `$gt`, `<` a `$lt`, `>=` a `$gte`, `<=` a `$lte`, `!=` a `$ne`, y `=` a una coincidencia directa.

  4. 4

    Copiar el resultado

    La línea `db.collection.find(...)` generada está lista para pegar en la shell mongosh o en una llamada del driver.

Un ejemplo práctico

SQL:

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

Consulta de MongoDB:

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

Qué asigna el conversor

SQL MongoDB find()
SELECT a, b proyección { a: 1, b: 1 }
SELECT * todos los campos (proyección vacía)
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)

Qué no se admite

  • JOIN. Solo se lee una tabla. Combinar colecciones requiere $lookup o un modelo de datos desnormalizado, que es una decisión de esquema, no una reescritura de consulta.
  • GROUP BY y agregaciones. COUNT, SUM, AVG y GROUP BY necesitan el pipeline de agregación (db.collection.aggregate([...])), que esta herramienta no genera.
  • Subconsultas, CTE y funciones de ventana. Replantea el modelo o divide el trabajo en etapas; no se pueden expresar en un find().
  • IN, LIKE y BETWEEN. El analizador de WHERE solo admite los operadores de comparación =, >, <, >=, <=, != y <>.
  • Mezclar AND y OR. Una cláusula WHERE se trata como toda AND o toda OR; no combines ambos en la misma sentencia.
  • INSERT, UPDATE, DELETE, CREATE TABLE. Solo se convierte SELECT.

Sobre el resultado

El resultado es siempre una sola línea db.collection.find(filtro, proyección), seguida opcionalmente de .sort() y .limit(). Está pensado para la shell y los drivers de MongoDB. No genera consultas de Firestore ni de Elasticsearch, y no elige índices ni optimiza el rendimiento. Prueba la consulta con tus propios datos antes de confiar en ella.

Preguntas frecuentes

No. El resultado es siempre una consulta find() de MongoDB para la shell mongosh o un driver. No hay selector de destino para otros almacenes de documentos.

No. Eso necesita el pipeline de agregación de MongoDB (aggregate([...])), que esta herramienta no genera. Solo produce consultas find() con filtro, proyección, orden y límite.

No. Solo se lee una tabla en FROM. Los almacenes NoSQL favorecen incrustar o referenciar, así que un JOIN suele implicar un cambio en el modelo de datos, no una reescritura de la consulta.

No. Solo se convierten sentencias SELECT. Las colecciones de MongoDB no tienen esquema por defecto, así que no hay definición de tabla que traducir.

Herramientas relacionadas

Herramienta disponible en otros idiomas