

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

要从表中读取数据，您可以使用 `GetItem`、`Query`，或者 `Scan`。默认情况下，Amazon DynamoDB 会返回所有项目属性。要仅获取部分属性而不是全部属性，请使用投影表达式。

*投影表达式*是用于标识所需属性的字符串。要检索单个属性，请指定其名称。对于多个属性，名称必须以逗号分隔。

下面是一些投影表达式的示例，基于 `ProductCatalog` 商品来自 [在 DynamoDB 中使用表达式时引用项目属性](Expressions.Attributes.md)：
+ 单个顶级属性。

  `Title `
+ 三个顶级属性。DynamoDB 检索整个 `Color` 设置。

  `Title, Price, Color`
+ 4 个顶级属性。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"
                }
            ]
        }
    }
}
```