

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

# 在 DynamoDB 中使用投影表達式
<a name="Expressions.ProjectionExpressions"></a>

若要從資料表讀取資料，您可以使用 `GetItem`、`Query` 或 `Scan` 等操作。Amazon DynamoDB 會依預設傳回所有項目屬性。若只要取得部分而非全部屬性，請使用投射表達式。

*投射表達式*是識別所需屬性的字串。若要擷取單一屬性，請指定其名稱。若為多個屬性，則必須以逗號分隔名稱。

以下是根據 [在 DynamoDB 中使用表達式時參考項目屬性](Expressions.Attributes.md) 中的 `ProductCatalog` 項目而來的一些投射表達式範例：
+ 單一最上層屬性。

  `Title `
+ 三個最上層屬性。DynamoDB 會擷取整個 `Color` 設定。

  `Title, Price, Color`
+ 四個最上層屬性。DynamoDB 會傳回 `RelatedItems` 和 `ProductReviews` 的整個內容。

  `Title, Description, RelatedItems, ProductReviews`

**注意**  
投影表達式不會影響佈建輸送量消耗。DynamoDB 會根據項目大小判定使用的容量單位數，而非根據傳回至應用程式的資料量判定。

**預留單字和特殊字元**

DynamoDB 有保留字與特殊字元。DynamoDB 可讓您將這些保留字與特殊字元用於名稱，但建議您避免這樣做，因為每次在表達式中使用這些名稱，都必須使用其別名。如需完整清單，請參閱 [DynamoDB 中的保留字](ReservedWords.md)。

以下情況，您需要使用表達式屬性名稱取代實際名稱：
+ 屬性名稱列於 DynamoDB 保留字清單上。
+ 屬性名稱不符合第一個字元為 `a-z` 或 `A-Z`，以及第二個字元 (如果有) 為 `a-Z`、`A-Z` 或 `0-9` 的要求。
+ 屬性名稱包含 **\$1** (井字號) 或 **:** (冒號)。

下列 AWS CLI 範例示範如何搭配 `GetItem`操作使用投影表達式。此投射表達式會擷取最上層純量屬性 (`Description`)、清單中的第一個元素 (`RelatedItems[0]`)，以及位於映射巢狀結構內的清單 (`ProductReviews.FiveStar`)。

```
aws dynamodb get-item \
    --table-name ProductCatalog \
    --key '"Id": { "N": "123" } \
    --projection-expression "Description, RelatedItems[0], ProductReviews.FiveStar"
```

此範例會傳回下列 JSON。

```
{
    "Item": {
        "Description": {
            "S": "123 description"
        },
        "ProductReviews": {
            "M": {
                "FiveStar": {
                    "L": [
                        {
                            "S": "Excellent! Can't recommend it highly enough! Buy it!"
                        },
                        {
                            "S": "Do yourself a favor and buy this."
                        }
                    ]
                }
            }
        },
        "RelatedItems": {
            "L": [
                {
                    "N": "341"
                }
            ]
        }
    }
}
```