Azure Cosmos DB for NoSQL での配列とオブジェクトの操作
適用対象: NoSQL
この記事全体の例で使用されている項目を次に示します。
{
"name": "Sondon Fins",
"categories": [
{ "name": "swim" },
{ "name": "gear"}
],
"metadata": {
"sku": "73310",
"manufacturer": "AdventureWorks"
},
"priceInUSD": 132.35,
"priceInCAD": 174.50
}
配列
次の例に示すように、静的な値を使用して配列を作成できます。
SELECT
[p.priceInUSD, p.priceInCAD] AS priceData
FROM products p
[
{
"priceData": [
132.35,
174.5
]
}
]
ARRAY
式を使用して、サブクエリの結果から配列を作成することもできます。 このクエリは、すべての個別のカテゴリを取得します。
SELECT
p.id,
ARRAY (SELECT DISTINCT VALUE c.name FROM c IN p.categories) AS categoryNames
FROM
products p
[
{
"id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"categoryNames": [
"swim",
"gear"
]
}
]
反復
NoSQL 用 API では、FROM
ソースの IN
キーワードによって、JSON 配列に対する反復がサポートされています。
たとえば、次のクエリでは、コンテナー内の各項目の tags
に対して反復が実行されます。 出力では、配列値が分割され、結果が 1 つの配列にフラット化されます。
SELECT
*
FROM
products IN products.categories
[
{
"name": "swim"
},
{
"name": "gear"
}
]
以下の例のように、配列の個々のエントリをさらにフィルターすることができます。
SELECT VALUE
p.name
FROM
p IN p.categories
WHERE
p.name LIKE "ge%"
結果は次のようになります。
[
"gear"
]
配列の反復処理の結果に対して集計することもできます。 たとえば、次のクエリは、タグの数を合計します。
SELECT VALUE
COUNT(1)
FROM
p IN p.categories
結果は次のようになります。
[
2
]
Note
IN
キーワードを使用して反復処理を行う場合、配列の外部にあるプロパティをフィルター処理したりプロジェクションしたりすることはできません。 代わりに、自己結合を使用する必要があります。