次の方法で共有


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 キーワードを使用して反復処理を行う場合、配列の外部にあるプロパティをフィルター処理したりプロジェクションしたりすることはできません。 代わりに、自己結合を使用する必要があります。