Docs Menu
Docs Home
/ /

MongoDB ステートメントを使用したクエリ

ページには、MongoDB クエリの例が示されています。SQL構文を使用してコレクションをクエリする基本的な例と、FLATTENUNWIND を使用してネストされたデータを処理するより高度な例を示します。

高度な構成サンプルフェデレーティッドデータベースインスタンスに対して次の MongoDB クエリを実行中てみてください。または、独自のデータを読み取るように変更します。

注意

SELECT * FROM sessions;

MongoDB は Sessionsコレクションのすべてのドキュメントを返します。

SELECT * FROM users LIMIT 2;

MongoDB は Usersコレクションから 2 つのドキュメントを返します。

SELECT * FROM users WHERE name = 'Jon Snow';

MongoSQL は、ユーザーの nameJon Snow であるドキュメントを Usersコレクションから返します。

WITH キーワードを使用すると、後で使用するための派生データソースの作成が簡単になります。

WITH RecentSales AS (
SELECT customer_id, SUM(amount) AS total_sales
FROM sales
WHERE sale_date > '2025-01-01'
GROUP BY customer_id
)
SELECT customer_id, total_sales
FROM RecentSales
WHERE total_sales > 1000;

MongoDB は、1、2025 年 1 月 日以降の合計売上額が 1000 を超える customer_id を持つドキュメントを Salesコレクションから返します。

このセクションでは、ドキュメント構造の操作を容易にする 2 つの MongoDB 機能について説明します。これらは MongoSQL に固有です。

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 を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

id

1

location

"New Collection"

customer

{経過時間: 50、メール: "customer@email.com"、満足度: 5 }

クエリ SELECT * FROM FLATTEN(customerInfo) を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

id

1

location

"New Collection"

customer_age

50

customer_email

"customer@email.com"

customer_satisfaction

5

FLATTENを使用すると、元のドキュメントの各フラット化フィールドは結果セットの最上位フィールドになります。 ネストされたフィールドは親フィールド名と連結され、デフォルトの区切り文字_で区切られます。

UNWIND 入力データソースから配列フィールドを分解して、その配列内の各項目に対して 1 行を出力します。 展開の詳細については、 $unwind集計ステージのドキュメントを参照してください。

配列フィールドを展開する構文は、データソースと オプションと組み合わせてFROM句で使用できるUNWIND関数です。

SELECT *
FROM UNWIND(<data source>
WITH PATH | PATHS => <array_paths>,
INDEX => <identifier>,
OUTER => <bool>
)
変数
必要性
説明

<data source>

必須

展開する配列フィールドのソース。

PATH | PATHS

必須

展開するデータソース内のフィールドへのパス。複数のパスを指定するには、括弧を使用します。

INDEX

任意

インデックス列を割り当てる名前。省略した場合、MongoSQL はインデックスフィールドを作成しません。

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 を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

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) を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

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 }

UNWINDPATH => visitsを併用すると、各visitsオブジェクトはテーブル行になります。

サンプルシナリオでは、 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
}
],
"purchases": [
{
"transaction": "1A",
"transactions": [
{
"amount": 100
},
{
"amount": 150
}
]
},
{
"transaction": "2B",
"transactions": [
{
"amount": 200
}
]
}
]
}

次のクエリを実行するとします。

SELECT v.year AS visit_year, v.score AS visit_score, p.transaction AS transaction_id, t.amount AS purchase_amount
FROM UNWIND(
customerInfo WITH PATHS => (
visits[INDEX => visit_idx],
purchases[OUTER => TRUE, INDEX => purchase_idx].transactions[]
),
INDEX => idx,
OUTER => FALSE
)

上記のクエリでは、次の処理が行われます。

  • visits 配列を展開し、展開した配列内のインデックス位置を追跡するためにインデックス名 visit_idx を割り当てます。

  • purchasesオブジェクト内で purchases 配列を展開し、transactions 配列を展開します。また、OUTER => TRUEを使用して、transactions 配列が欠落しているか空である購入を保持します。

MongoSQL では、次のフィールドを持つドキュメントが返されます。

visit_year
visit_score
transaction_id
purchase_amount

2020

10

1A

100

2020

10

2B

150

2021

8

1A

100

2021

8

2B

150

結果では、各行には 1 つの visits エントリと 1 つの transactions エントリのデータが含まれています。

次の例では、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 を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

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)) を実行すると、MongoSQL は次の最上位フィールドを持つドキュメントを返します。

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 配列が展開され、結果のドキュメントがフラット化されます。

戻る

プライベートエンドポイント

項目一覧