SQL till NoSQL

Klistra in en enda SQL-SELECT-sats så skriver konverteraren om den till en likvärdig MongoDB-find()-fråga. Den mappar de valda kolumnerna till en projektion, WHERE-satsen till ett filter, ORDER BY till .sort() och LIMIT till .limit(). Det är en frågeomskrivare för enkla satser, inte ett migreringsverktyg: JOIN, GROUP BY, aggregeringar och underfrågor stöds inte.

Så fungerar konverteringen

  1. 1

    Tolka SELECT:en

    Verktyget läser en enda sats på formen `SELECT kolumner FROM tabell [WHERE ...] [ORDER BY ...] [LIMIT n]`.

  2. 2

    Mappa varje sats

    Kolumner blir en projektion `{ col: 1 }`, `WHERE` blir ett filter, `ORDER BY` blir `.sort()` och `LIMIT` blir `.limit()`.

  3. 3

    Översätt operatorerna

    Jämförelseoperatorer mappas till Mongo-operatorer: `>` till `$gt`, `<` till `$lt`, `>=` till `$gte`, `<=` till `$lte`, `!=` till `$ne`, och `=` till en direkt matchning.

  4. 4

    Kopiera utdatan

    Den genererade raden `db.collection.find(...)` är redo att klistra in i mongosh-skalet eller ett driver-anrop.

Ett genomarbetat exempel

SQL:

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

MongoDB-fråga:

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

Vad konverteraren mappar

SQL MongoDB find()
SELECT a, b projektion { a: 1, b: 1 }
SELECT * alla fält (tom projektion)
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)

Vad som inte stöds

  • JOIN:s. Endast en enda tabell läses. Att kombinera kollektioner kräver $lookup eller en denormaliserad datamodell, vilket är ett schemabeslut, inte en frågeomskrivning.
  • GROUP BY och aggregeringar. COUNT, SUM, AVG och GROUP BY kräver aggregeringspipelinen (db.collection.aggregate([...])), som det här verktyget inte genererar.
  • Underfrågor, CTE:er och fönsterfunktioner. Tänk om modellen eller dela upp arbetet i steg; de kan inte uttryckas i en find().
  • IN, LIKE och BETWEEN. WHERE-tolken hanterar endast jämförelseoperatorerna =, >, <, >=, <=, != och <>.
  • Blanda AND och OR. En WHERE-sats behandlas som helt AND eller helt OR; kombinera inte båda i samma sats.
  • INSERT, UPDATE, DELETE, CREATE TABLE. Endast SELECT konverteras.

Om utdatan

Resultatet är alltid en enda rad db.collection.find(filter, projektion), eventuellt följd av .sort() och .limit(). Den riktar sig till MongoDB-skalet och drivrutinerna. Den producerar inga Firestore- eller Elasticsearch-frågor, och den väljer inga index och optimerar inte prestandan. Testa frågan mot dina egna data innan du förlitar dig på den.

Vanliga frågor

Nej. Utdatan är alltid en MongoDB-find()-fråga för mongosh-skalet eller en drivrutin. Det finns inget målval för andra dokumentlager.

Nej. Det kräver MongoDB:s aggregeringspipeline (aggregate([...])), som det här verktyget inte genererar. Det producerar endast find()-frågor med filter, projektion, sortering och gräns.

Nej. Endast en enda FROM-tabell läses. NoSQL-lager föredrar inbäddning eller referenser, så en JOIN innebär oftast en ändring av datamodellen, inte en frågeomskrivning.

Nej. Endast SELECT-satser konverteras. Kollektioner i MongoDB är schemalösa som standard, så det finns ingen tabelldefinition att översätta.

Relaterade verktyg

Verktyget finns på andra språk