MongoDB の SQL
MongoDB と Amazon DocumentDB では、データの操作やその他の処理を実行するために、JavaScript で mongo シェル用のスクリプトを記述します。 主に SQL でデータをクエリする開発者にとって、MongoDB または Amazon DocumentDB のコレクションでも SQL を使用すると便利です。 IntelliJ IDEA は、SQL クエリを JavaScript に変換します。
SQL の JavaScript バージョンを表示するには、クエリを右クリックして JS スクリプトの表示 を選択します。
現在の実装では、SELECT クエリと次のクエリがサポートされています:
JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、OFFSET
SQL クエリの JavaScript 翻訳を参照する
クエリを右クリックして、 JS スクリプトの表示 を選択します。 JavaScript コードをクリップボードにコピーするには、 JS スクリプトをクリップボードにコピー をクリックします。
JS スクリプトのプレビュー からスクリプトを変更して実行できます。


データ型
IntelliJ IDEA は、次のデータ型をサポートしています。
文字列、整数、浮動小数点数、ブール値
NULL、NAN、INFINITY
配列(
[1, 2, 3])とマップ ({a: 1, b: 2, c: 3})
配列とマップには任意の式を含めることができます。
文字列リテラルは、一重引用符または二重引用符で使用できます。
引用符なしで列名を記述するか、アクサングラーブ(` )を使用します。
オブジェクトコンストラクター
次のオブジェクトコンストラクターを使用できます: BinData、 HexData、 UUID、 MD5、 ObjectID、 日付、 ISODate、 コード、 DBRef、 正規表現、 NumberInt、 NumberLong、 NumberDecimal、 タイムスタンプ、 MinKey、 MaxKey
new キーワードは使用しても省略しても構いません。 IntelliJ IDEA は、MongoDB または Amazon DocumentDB のクエリに new キーワードを自動で追加します。 この機能は、 Date() と new Date() の違いにより、 日付 オブジェクトコンストラクターには適用されません。 Date() は現在の日付を文字列として返し、 new Date() は Date オブジェクトとして返します。
関数名が不明な場合、IntelliJ IDEA は関数名の前に new キーワードがあるかどうかを検索します。 new キーワードがある場合、その名前はオブジェクトコンストラクターとして扱われます。 それ以外の場合は、関数呼び出しとして扱われます。 例: 次のクエリ:
次のように翻訳されます:
関数
MongoDB および Amazon DocumentDB の集計パイプライン演算子は、 map、 reduce、 filter、 let を除き、すべて使用できます。 また、COUNT(*) は使用できますが、まだサポートされていない COUNT (式) は使用できません。
MongoDB と Amazon DocumentDB では、一部の関数で名前付き引数が必要です。 名前付き引数を使用するには、名前付きパラメーターに PostgreSQL 風の構文(例: => または := )を使用してください。 パラメーター化された関数に名前を指定しないとエラーが発生します。 dateToString 関数の例を以下に示します。
docs.mongodb.com の集約パイプラインオペレーター(英語)で名前付きパラメーターをサポートするすべてのパイプライン演算子のリストを確認できます。
制限
SQL と MongoDB および Amazon DocumentDB では集計関数に対するアプローチが異なるため、AVG、SUM、MIN、MAX などの集計関数を非集計として使用することはできません。 例:
SELECT MAX(1,2,3)は機能しません。MongoDB と Amazon DocumentDB では、
AVG、SUM、MIN、MAXなどの関数は集計・非集計の両方として扱われる場合があります。グループブロックに配置されている場合は集計です。 それ以外の場合、非集計となります。SQL では、そのような依存関係はなく、GROUP BY 句なしで集計関数を使用できます(たとえば、
SELECT AVG(x) FROM t)。他の集計関数内で集計関数を呼び出すことはできません。
演算子
現在、次の機能がサポートされています。
オペランド:
=、==、>=、<=、戻り値のラップダイアログ、<、<>、!=、+、-、/、*、%、AND、OR、NOT、LIKE、NOT LIKE、IS、IS NOT、IN、NOT IN、BETWEEN、NOT BETWEENLIKE演算子にはワイルドカードを使用できます。 これらのワイルドカードは、MongoDB または Amazon DocumentDB で有効な正規表現に変換されます。

SQL 句
SELECT
SELECT クエリでは次の機能がサポートされています。
オプション:
DISTINCT、ALL集計関数と非集計関数。
点線の名前を使用した埋め込みフィールドへのアクセス。 次の例を考えてみましょう。


制限
列にはエイリアスが含まれる場合があります。 エイリアスにピリオド(
。)を含めることはできません。
FROM
テーブルにはエイリアスを使用できます。
ネストされた
SELECTステートメントにはエイリアスを使用する必要があります。ネストされた
SELECTクエリを使用できます。 例: 次のクエリは有効です。

制限
エイリアスにピリオド(
。)を含めることはできません。
JOIN
JOIN(INNER JOIN) とLEFT JOIN(LEFT OUTER JOIN) のみがサポートされます。オン条件のみがサポートされます。オン部分には条件が 1 つだけあります。 次のクエリはエラーになります。

オン条件では、==または=演算子を使用できます。複数の
JOIN句がサポートされています。
制限
USINGはサポートされていません。SELECTステートメントをJOIN句の 2 番目の引数として使用することはできません。JOIN句では、テーブル名とエイリアスが重複してはなりません。
WHERE
LIKEおよびNOT LIKEには文字列リテラルが必要です。 次のクエリはエラーになります。

GROUP BY
IntelliJ IDEA は GROUP BY 句をサポートします。
SELECT 句には、 GROUP BY 句の式に機能的に依存する式を含めることができます。 列が GROUP BY 句で使用されている場合は、 SELECT 句で列の埋め込みフィールドを使用できます。


HAVING
IntelliJ IDEA は HAVING 句をサポートします。


ORDER BY
IntelliJ IDEA は ORDER BY 句をサポートします。 ORDER BY の代わりに SORT BY を使用できます。


LIMIT
IntelliJ IDEA は LIMIT 句をサポートします。


OFFSET
IntelliJ IDEA は OFFSET 句をサポートします。

