SQL a NoSQL

Incolla una singola istruzione SQL SELECT e il convertitore la riscrive come una query find() equivalente di MongoDB. Mappa le colonne selezionate su una proiezione, la clausola WHERE su un filtro, ORDER BY su .sort() e LIMIT su .limit(). È un riscrittore di query per istruzioni semplici, non uno strumento di migrazione: JOIN, GROUP BY, aggregazioni e sottoquery non sono supportati.

Come funziona la conversione

  1. 1

    Analizzare il SELECT

    Lo strumento legge una singola istruzione della forma `SELECT colonne FROM tabella [WHERE ...] [ORDER BY ...] [LIMIT n]`.

  2. 2

    Mappare ogni clausola

    Le colonne diventano una proiezione `{ col: 1 }`, `WHERE` diventa un filtro, `ORDER BY` diventa `.sort()` e `LIMIT` diventa `.limit()`.

  3. 3

    Tradurre gli operatori

    Gli operatori di confronto vengono mappati sugli operatori di Mongo: `>` su `$gt`, `<` su `$lt`, `>=` su `$gte`, `<=` su `$lte`, `!=` su `$ne`, e `=` su una corrispondenza diretta.

  4. 4

    Copiare il risultato

    La riga `db.collection.find(...)` generata è pronta per essere incollata nella shell mongosh o in una chiamata del driver.

Un esempio pratico

SQL:

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

Query di MongoDB:

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

Cosa mappa il convertitore

SQL MongoDB find()
SELECT a, b proiezione { a: 1, b: 1 }
SELECT * tutti i campi (proiezione vuota)
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)

Cosa non è supportato

  • JOIN. Viene letta una sola tabella. Combinare le collezioni richiede $lookup o un modello di dati denormalizzato, che è una decisione di schema, non una riscrittura di query.
  • GROUP BY e aggregazioni. COUNT, SUM, AVG e GROUP BY richiedono la pipeline di aggregazione (db.collection.aggregate([...])), che questo strumento non genera.
  • Sottoquery, CTE e funzioni di finestra. Ripensa il modello o suddividi il lavoro in fasi; non possono essere espressi in un find().
  • IN, LIKE e BETWEEN. L’analizzatore di WHERE gestisce solo gli operatori di confronto =, >, <, >=, <=, != e <>.
  • Mischiare AND e OR. Una clausola WHERE viene trattata come tutta AND o tutta OR; non combinare entrambi nella stessa istruzione.
  • INSERT, UPDATE, DELETE, CREATE TABLE. Solo SELECT viene convertito.

Sul risultato

Il risultato è sempre una singola riga db.collection.find(filtro, proiezione), seguita facoltativamente da .sort() e .limit(). È pensato per la shell e i driver di MongoDB. Non produce query per Firestore o Elasticsearch, e non sceglie indici né ottimizza le prestazioni. Prova la query sui tuoi dati prima di farvi affidamento.

Domande frequenti

No. Il risultato è sempre una query find() di MongoDB per la shell mongosh o un driver. Non c’è un selettore di destinazione per altri archivi di documenti.

No. Questo richiede la pipeline di aggregazione di MongoDB (aggregate([...])), che questo strumento non genera. Produce solo query find() con filtro, proiezione, ordinamento e limite.

No. Viene letta una sola tabella FROM. Gli archivi NoSQL favoriscono l’incorporamento o il riferimento, quindi una join di solito implica una modifica del modello di dati, non una riscrittura della query.

No. Vengono convertite solo le istruzioni SELECT. Le collezioni di MongoDB sono senza schema per impostazione predefinita, quindi non c’è alcuna definizione di tabella da tradurre.

Strumenti correlati

Strumento disponibile in altre lingue