

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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`。
+ 一個屬性 (`Color`) 為 `String Set`。
+ 下列屬性為文件資料類型：
  + `RelatedItems` 的清單。每個元素是相關產品的 `Id`。
  + `Pictures` 的映射。每個元素是圖片的簡短說明，以及對應影像檔的 URL。
  + `ProductReviews` 的映射。每個元素都代表一個評分及對應至該評分的評論清單。一開始，此映射會填入五星與一星評論。

## 最上層屬性
<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] 代表第二個，以此類推。以下是一些範例：
+ `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` 清單中的第三個元素 (記得清單元素的開頭為零)。

  `RelatedItems[2]`
+ 產品的正視圖。

  `Pictures.FrontView`
+ 所有五星評論。

  `ProductReviews.FiveStar`
+ 第一個五星評論。

  `ProductReviews.FiveStar[0]`

**注意**  
文件路徑的最大深度為 32。因此，路徑中的取消參考運算子數目不得超過此限制。

您可以在文件路徑中使用任何屬性名稱，只要名稱符合下列要求：
+ 第一個字元為 `a-z`、`A-Z` 或 `0-9`
+ 第二個字符 (如果有) 為 `a-z` 或 `A-Z`

**注意**  
若屬性名稱未符合此需求，您必須將表達式屬性名稱定義為預留位置。

如需詳細資訊，請參閱[DynamoDB 中的表達式屬性名稱 (別名)](Expressions.ExpressionAttributeNames.md)。