SQL na NoSQL

Wklej pojedyncze zapytanie SQL SELECT, a konwerter przepisze je na równoważne zapytanie find() MongoDB. Mapuje wybrane kolumny na projekcję, klauzulę WHERE na filtr, ORDER BY na .sort() i LIMIT na .limit(). To narzędzie do przepisywania prostych zapytań, a nie narzędzie do migracji: JOIN, GROUP BY, agregacje i podzapytania nie są obsługiwane.

Jak działa konwersja

  1. 1

    Parsowanie SELECT

    Narzędzie odczytuje pojedyncze zapytanie w postaci `SELECT kolumny FROM tabela [WHERE ...] [ORDER BY ...] [LIMIT n]`.

  2. 2

    Mapowanie każdej klauzuli

    Kolumny stają się projekcją `{ col: 1 }`, `WHERE` staje się filtrem, `ORDER BY` staje się `.sort()`, a `LIMIT` staje się `.limit()`.

  3. 3

    Tłumaczenie operatorów

    Operatory porównania są mapowane na operatory Mongo: `>` na `$gt`, `<` na `$lt`, `>=` na `$gte`, `<=` na `$lte`, `!=` na `$ne`, a `=` na bezpośrednie dopasowanie.

  4. 4

    Skopiuj wynik

    Wygenerowany wiersz `db.collection.find(...)` jest gotowy do wklejenia w powłoce mongosh lub w wywołaniu sterownika.

Przykład krok po kroku

SQL:

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

Zapytanie MongoDB:

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

Co mapuje konwerter

SQL MongoDB find()
SELECT a, b projekcja { a: 1, b: 1 }
SELECT * wszystkie pola (pusta projekcja)
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)

Czego nie obsługuje

  • JOIN-y. Odczytywana jest tylko jedna tabela. Łączenie kolekcji wymaga $lookup lub zdenormalizowanego modelu danych, a to decyzja dotycząca schematu, nie przepisania zapytania.
  • GROUP BY i agregacje. COUNT, SUM, AVG i GROUP BY wymagają potoku agregacji (db.collection.aggregate([...])), którego to narzędzie nie generuje.
  • Podzapytania, CTE i funkcje okienkowe. Przemyśl model lub podziel pracę na etapy; nie da się ich wyrazić w find().
  • IN, LIKE i BETWEEN. Parser WHERE obsługuje wyłącznie operatory porównania =, >, <, >=, <=, != i <>.
  • Mieszanie AND i OR. Klauzula WHERE jest traktowana jako w całości AND albo w całości OR; nie łącz obu w jednym zapytaniu.
  • INSERT, UPDATE, DELETE, CREATE TABLE. Konwertowany jest tylko SELECT.

O wyniku

Wynik to zawsze pojedynczy wiersz db.collection.find(filtr, projekcja), opcjonalnie zakończony .sort() i .limit(). Jest przeznaczony dla powłoki i sterowników MongoDB. Nie generuje zapytań Firestore ani Elasticsearch, nie dobiera indeksów i nie optymalizuje wydajności. Przetestuj zapytanie na własnych danych, zanim na nim polegniesz.

Najczęściej zadawane pytania

Nie. Wynik to zawsze zapytanie find() MongoDB dla powłoki mongosh lub sterownika. Nie ma wyboru celu dla innych baz dokumentowych.

Nie. To wymaga potoku agregacji MongoDB (aggregate([...])), którego to narzędzie nie generuje. Tworzy tylko zapytania find() z filtrem, projekcją, sortowaniem i limitem.

Nie. Odczytywana jest tylko jedna tabela FROM. Bazy NoSQL preferują osadzanie lub odwołania, więc JOIN zwykle oznacza zmianę modelu danych, a nie przepisanie zapytania.

Nie. Konwertowane są tylko zapytania SELECT. Kolekcje w MongoDB są domyślnie bezschematowe, więc nie ma definicji tabeli do przełożenia.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach