SQL から NoSQL へ
SQLのSELECT文を1つ貼り付けると、変換ツールが同等のMongoDBのfind()クエリに書き換えます。選択した列を射影に、WHERE句をフィルターに、ORDER BYを.sort()に、LIMITを.limit()にマッピングします。これは単純な文のためのクエリ書き換えツールであり、移行ツールではありません。JOIN、GROUP BY、集約、サブクエリには対応していません。
変換の仕組み
-
1
SELECTを解析する
このツールは`SELECT 列 FROM テーブル [WHERE ...] [ORDER BY ...] [LIMIT n]`という形の1つの文を読み取ります。
-
2
各句をマッピングする
列は射影`{ col: 1 }`に、`WHERE`はフィルターに、`ORDER BY`は`.sort()`に、`LIMIT`は`.limit()`になります。
-
3
演算子を変換する
比較演算子はMongoの演算子にマッピングされます。`>`は`$gt`、`<`は`$lt`、`>=`は`$gte`、`<=`は`$lte`、`!=`は`$ne`、`=`は直接一致です。
-
4
出力をコピーする
生成された`db.collection.find(...)`の行は、mongoshシェルやドライバー呼び出しにそのまま貼り付けられます。
具体例
SQL:
SELECT name, price FROM products WHERE price > 100 ORDER BY price DESC LIMIT 5;
MongoDBのクエリ:
db.products.find({ price: { $gt: 100 } }, { name: 1, price: 1 }).sort({ price: -1 }).limit(5)
変換ツールがマッピングするもの
| SQL | MongoDB find() |
|---|---|
SELECT a, b |
射影 { a: 1, b: 1 } |
SELECT * |
すべてのフィールド(空の射影) |
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) |
対応していないもの
- JOIN。 読み取られるのは1つのテーブルだけです。コレクションの結合には
$lookupか非正規化したデータモデルが必要で、これはクエリの書き換えではなくスキーマの判断です。 - GROUP BYと集約。
COUNT、SUM、AVG、GROUP BYは集約パイプライン(db.collection.aggregate([...]))を必要とし、このツールはそれを生成しません。 - サブクエリ、CTE、ウィンドウ関数。 モデルを考え直すか、作業を段階に分けてください。
find()では表現できません。 - IN、LIKE、BETWEEN。
WHEREのパーサーは比較演算子=、>、<、>=、<=、!=、<>のみを扱います。 - ANDとORの混在。
WHERE句はすべてANDかすべてORとして扱われます。同じ文で両方を組み合わせないでください。 - INSERT、UPDATE、DELETE、CREATE TABLE。 変換されるのは
SELECTだけです。
出力について
結果は常に1行のdb.collection.find(フィルター, 射影)で、必要に応じて.sort()と.limit()が続きます。MongoDBのシェルとドライバーを対象としています。FirestoreやElasticsearchのクエリは生成せず、インデックスの選択やパフォーマンスの最適化も行いません。信頼して使う前に、ご自身のデータでクエリをテストしてください。
よくある質問
いいえ。出力は常にmongoshシェルまたはドライバー向けのMongoDBのfind()クエリです。他のドキュメントストア向けのターゲット選択はありません。
いいえ。それらにはMongoDBの集約パイプライン(aggregate([...]))が必要で、このツールはそれを生成しません。フィルター、射影、ソート、リミットを持つfind()クエリのみを生成します。
いいえ。読み取られるFROMテーブルは1つだけです。NoSQLストアは埋め込みや参照を好むため、JOINは通常クエリの書き換えではなくデータモデルの変更を意味します。
いいえ。変換されるのはSELECT文だけです。MongoDBのコレクションは既定でスキーマレスなので、変換すべきテーブル定義はありません。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
FPS カウンター
requestAnimationFrame でブラウザーの FPS を測定。平滑化、最小・最大フレームレート、警告しきい値、任意のグラフに対応。ローカルで動作し、アップロードも API も不要です。
プレースホルダー画像ジェネレーター
1〜4000 pxの画像に色と文字を設定し、PNGで保存できます。外部URLとHTMLもコピーできます。
このツールは他の言語でも利用できます
- Dari SQL ke NoSQL [ID]
- SQL zu NoSQL [DE]
- SQL a NoSQL [ES]
- การแปลง SQL เป็น NoSQL [TH]
- SQL na NoSQL [PL]
- من SQL إلى NoSQL [AR]
- SQL vers NoSQL [FR]
- Từ SQL sang NoSQL [VI]
- SQL para NoSQL [PT]
- SQL → NoSQL [KO]
- SQL till NoSQL [SV]
- SQL naar NoSQL [NL]
- SQL to NoSQL [EN]
- SQL a NoSQL [IT]
- SQL в NoSQL [RU]
- SQL'den NoSQL'e [TR]
- 从 SQL 到 NoSQL [ZH]