Atlas SQL ステートメントを使用したクエリ
項目一覧
ページには、Atlas SQL クエリの例が示されています。 SQL 構文を使用してコレクションをクエリする基本的な例と、 FLATTEN
とUNWIND
を使用してネストされたデータを処理するより高度な例があります。
サンプル クエリ
高度な構成サンプル フェデレーティッドデータベースインスタンスに対して次の Atlas SQL クエリを実行してみてください。または、独自のデータを読み取るように変更します。
注意
これらの例では、短縮形式の構文を使用します。
SELECT ステートメント
SELECT * FROM sessions;
Atlas SQL は、 Sessions
コレクションからすべてのドキュメントを返します。
制限ステートメント
SELECT * FROM users LIMIT 2;
Atlas SQL は、 Users
コレクションから 2 つのドキュメントを返します。
WHERE ステートメント
SELECT * FROM users WHERE name = 'Jon Snow';
Atlas SQL は、ユーザーのname
がJon Snow
であるドキュメントをUsers
コレクションから返します。
FLATTEN と UNIX をする
このセクションでは、ドキュメント構造の操作を容易にする 2 つの Atlas SQL 機能について説明します。 これらは Atlas SQL に固有です。
FLATTEN
FLATTEN
半構造化データ(JSON 内の名前と値のペア)を別々の列にフラット化します。 フィールド名は、そのフィールドのすべての値を行に保持する列名になります。
ネストされたドキュメントをフラット化するための構文は、データソースと オプションと組み合わせてFROM
句で使用できるFLATTEN
関数です。
SELECT * FROM FLATTEN(<data source> WITH DEPTH => <integer>, SEPARATOR => <string> )
変数 | 必要性 | 説明 |
---|---|---|
<data source> | 必須 | データソースをフラット化する |
DEPTH | 任意 | フラット化するサブドキュメントのレベル数を示す正の整数。 デフォルトでは、すべてのレベルのサブドキュメントがフラット化されます。 |
SEPARATOR | 任意 | フィールド名を連結するときに区切り文字として使用するstring 。 デフォルトは _ です。 |
平面の例
サンプルシナリオでは、 customerInfo
コレクションには次のように構造されたドキュメントが含まれています。
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 } }
クエリSELECT * FROM customerInfo
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 |
location | "New Collection" |
customer | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } |
クエリSELECT * FROM FLATTEN(customerInfo)
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 |
location | "New Collection" |
customer_age | 50 |
customer_email | "customer@email.com" |
customer_satisfaction | 5 |
FLATTEN
を使用すると、元のドキュメントの各フラット化フィールドは結果セットの最上位フィールドになります。 ネストされたフィールドは親フィールド名と連結され、デフォルトの区切り文字_
で区切られます。
UNWIND
UNWIND
入力データソースから配列フィールドを分解して、その配列内の各項目に対して 1 行を出力します。 展開の詳細については、 $unwind集計ステージのドキュメントを参照してください。
配列フィールドを展開する構文は、データソースと オプションと組み合わせてFROM
句で使用できるUNWIND
関数です。
SELECT * FROM UNWIND(<data source> WITH PATH => <array_path>, INDEX => <identifier>, OUTER => <bool> )
変数 | 必要性 | 説明 |
---|---|---|
<data source> | 必須 | 展開する配列フィールドのソース。 |
PATH | 必須 | 展開するデータソース内のフィールドへのパス。 |
INDEX | 任意 | インデックス列を割り当てる名前。 省略した場合、Atlas SQL はインデックス フィールドを作成しません。 |
OUTER | 任意 | null、欠落、または空の配列値を持つドキュメントが保持されるかどうかを示すフラグ。 true の場合、null、欠落、または空の配列値を持つドキュメントは保持されます。 デフォルトはfalse です。 |
展開の例
サンプルシナリオでは、 customerInfo
コレクションには次のように構造されたドキュメントが含まれています。
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 }, visits: [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022 score: 7 } ] }
クエリSELECT * FROM customerInfo
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 |
location | "New Collection" |
customer | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } |
visits | [ { 年: 2020 、スコア: 10 }、{ 年: 2021 、スコア: 8 }、{ 年: 2022 、スコア: 7 } |
クエリSELECT * FROM UNWIND(customerInfo WITH PATH => visits, INDEX => idx)
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 | 1 | 1 |
location | "New Collection" | "New Collection" | "New Collection" |
customer | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } |
idx | 0 | 1 | 2 |
visits | { 年: 2020 、スコア: 10 } | { 年: 2021 、スコア: 8 } | { 年: 2022 、スコア: 7 } |
UNWIND
とPATH => visits
を併用すると、各visits
オブジェクトはテーブル行になります。
FLATTEN と UNIX を組み合わせた例
次の例では、FLATTEN
関数とUNWIND
関数を組み合わせています。
サンプルシナリオでは、 customerInfo
コレクションには次のように構造されたドキュメントが含まれています。
{ id: 1, location: "New York", customer: { age: 50, email: "customer@email.com", satisfaction: 5 }, visits: [ { year: 2020, score: 10 }, { year: 2021, score: 8 }, { year: 2022 score: 7 } ] }
クエリSELECT * FROM customerInfo
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 |
location | "New Collection" |
satisfaction | 5 |
customer | {経過時間: 50、メール: "customer@email.com"、満足度: 5 } |
visits | [ { 年: 2020 、スコア: 10 }、{ 年: 2021 、スコア: 8 }、{ 年: 2022 、スコア: 7 } |
クエリSelect * from FLATTEN(UNWIND(customerInfo WITH PATH => visits, INDEX => idx))
を実行すると、Atlas SQL は次の最上位フィールドを持つドキュメントを返します。
id | 1 | 1 | 1 |
location | "New Collection" | "New Collection" | "New Collection" |
satisfaction | 5 | 5 | 5 |
customer_age | 50 | 50 | 50 |
customer_email | "customer@email.com" | "customer@email.com" | "customer@email.com" |
idx | 0 | 1 | 2 |
visits_year | 2020 | 2021 | 2022 |
visits_score | 10 | 8 | 7 |
FLATTEN
関数とUNWIND
関数の両方を使用すると、visits
配列が展開され、結果のドキュメントがフラット化されます。