

# DynamoDB で式を使用する場合の項目属性の参照
<a name="Expressions.Attributes"></a>

このセクションでは、Amazon DynamoDB で式の項目属性を参照する方法を説明します。複数のリストやマップ内で深くネストされている場合でも、属性を使用できます。

**Topics**
+ [最上位属性](#Expressions.Attributes.TopLevelAttributes)
+ [入れ子の属性](#Expressions.Attributes.NestedAttributes)
+ [ドキュメントパス](#Expressions.Attributes.NestedElements.DocumentPathExamples)

**サンプル項目: ProductCatalog**  
このページの例では、`ProductCatalog` テーブルで次のサンプル項目を使用しています (このテーブルについては、「[DynamoDB で使用するテーブルとデータの例](AppendixSampleTables.md)」で説明されています)。

```
{
    "Id": 123,
    "Title": "Bicycle 123",
    "Description": "123 description",
    "BicycleType": "Hybrid",
    "Brand": "Brand-Company C",
    "Price": 500,
    "Color": ["Red", "Black"],
    "ProductCategory": "Bicycle",
    "InStock": true,
    "QuantityOnHand": null,
    "RelatedItems": [
        341,
        472,
        649
    ],
    "Pictures": {
        "FrontView": "http://example.com/products/123_front.jpg",
        "RearView": "http://example.com/products/123_rear.jpg",
        "SideView": "http://example.com/products/123_left_side.jpg"
    },
    "ProductReviews": {
	    "FiveStar": [
	    		"Excellent! Can't recommend it highly enough! Buy it!",
	    		"Do yourself a favor and buy this."
	    ],
	    "OneStar": [
	    		"Terrible product! Do not buy this."
	    ]
    },
    "Comment": "This product sells out quickly during the summer",
    "Safety.Warning": "Always wear a helmet"
 }
```

次の点に注意してください。
+ パーティションキー値 (`Id`) は `123` です。ソートキーはありません。
+ ほとんどの属性に、`String`、`Number`、`Boolean`、`Null` などのスカラーデータ型があります。
+ 1 つの属性 (`Color`) は `String Set` です。
+ 次の属性はドキュメントデータ型です。
  + `RelatedItems` のリスト。各要素は関連製品の `Id` です。
  + `Pictures` のマップ。各要素は対応するイメージファイルの URL と、写真の短い説明です。
  + `ProductReviews` のマップ。各要素は、レーティングと、そのレーティングに対応する評価のリストを表します。最初に、このマップには 5 つ星と 1 つ星の評価が入力されます。

## 最上位属性
<a name="Expressions.Attributes.TopLevelAttributes"></a>

属性が別の属性に組み込まれていない場合、*最上位属性*と呼ばれます。`ProductCatalog` 項目の最上位属性は次のようになります。
+ `Id`
+ `Title`
+ `Description`
+ `BicycleType`
+ `Brand`
+ `Price`
+ `Color`
+ `ProductCategory`
+ `InStock`
+ `QuantityOnHand`
+ `RelatedItems`
+ `Pictures`
+ `ProductReviews`
+ `Comment`
+ `Safety.Warning`

`Color` (リスト)、`RelatedItems` (リスト)、`Pictures` (マップ)、および `ProductReviews` (マップ) を除くすべての最上位属性はスカラーです。

## 入れ子の属性
<a name="Expressions.Attributes.NestedAttributes"></a>

属性が別の属性に組み込まれている場合、*入れ子の属性*と呼ばれます。入れ子の属性にアクセスするには、*間接参照演算子*を使用します。
+ `[n]` — リストの要素
+ `.` (ドット) — マップの要素

### リスト要素へのアクセス
<a name="Expressions.Attributes.NestedElements.AccessingListElements"></a>

リスト要素の間接参照演算子は **[*n*]** で、*n* は要素数です。リストの要素はゼロベースであるため、[0] はリスト内の最初の要素、[1] は 2 番目の要素、という順番で表されます。次に例を示します。
+ `MyList[0]`
+ `AnotherList[12]`
+ `ThisList[5][11]`

要素 `ThisList[5]` は、それ自体がネストされたリストです。したがって、`ThisList[5][11]` は、そのリストの 12 番目の要素を参照します。

角括弧内の数は、負以外の整数である必要があります。そのため、次の式は無効です。
+ `MyList[-1]`
+ `MyList[0.4]`

### マップ要素へのアクセス
<a name="Expressions.Attributes.NestedElements.AccessingMapElements"></a>

マップ要素の間接参照演算子は **.** (ドット) です。マップの要素間の区切り文字として、ドットを使用します。
+ `MyMap.nestedField`
+ `MyMap.nestedField.deeplyNestedField`

## ドキュメントパス
<a name="Expressions.Attributes.NestedElements.DocumentPathExamples"></a>

式では、*ドキュメントパス*を使用して、属性の場所を DynamoDB に伝えます。最上位属性の場合、ドキュメントパスは単純に属性名になります。ネストされた属性の場合は、間接参照演算子を使用してドキュメントパスを構築します。

ドキュメントパスのいくつかの例を次に示します。([DynamoDB で式を使用する場合の項目属性の参照](#Expressions.Attributes) に示された項目を参照してください)
+ 最上位のスカラー属性。

   `Description`
+ 最上位のリスト属性。(これはいくつかの要素だけではなく、すべてを示すリストを返します)

  `RelatedItems`
+ `RelatedItems` リストの 3 番目の要素 （このリスト要素はゼロベースであることに注意してください)。

  `RelatedItems[2]`
+ 製品の正面の写真。

  `Pictures.FrontView`
+ すべての 5 つ星の評価。

  `ProductReviews.FiveStar`
+ 最初の 5 つ星の評価。

  `ProductReviews.FiveStar[0]`

**注記**  
ドキュメントパスの最大深度は 32 です。したがって、任意のパスの間接参照演算子の数はこの制限を超えることはできません。

次の要件を満たしている限り、ドキュメントパスには任意の属性名を使用できます。
+ 最初の文字は `a-z`、`A-Z`、または `0-9`
+ 2 番目の文字 (存在する場合) は `a-z`、`A-Z`

**注記**  
属性名がこの要件を満たさない場合は、式の属性名をプレースホルダーとして定義する必要があります。

詳細については、「[DynamoDB の式の属性名 (エイリアス)](Expressions.ExpressionAttributeNames.md)」を参照してください。