

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

# Scan
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-scan"></a>

`Scan` 請求映射文件可讓您指示 AWS AppSync DynamoDB 解析程式向 DynamoDB 提出`Scan`請求，並可讓您指定下列項目：
+ 排除結果的篩選結果
+ 要使用哪些索引
+ 要傳回多少項目
+ 是否使用一致性讀取
+ 分頁字符
+ 平行掃描

`Scan` 映射文件結構如下：

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "index" : "fooIndex",
    "limit" : 10,
    "consistentRead" : false,
    "nextToken" : "aPaginationToken",
    "totalSegments" : 10,
    "segment" : 1,
    "filter" : {
        ...
    },
    "projection" : {
        ...
    }
}
```

欄位定義如下：

## 掃描欄位
<a name="scan-list"></a>

### 掃描欄位清單
<a name="scan-list-col"></a>

** `version` **  
範本定義版本。目前支援 `2017-02-28` 和 `2018-05-29`。此值為必填。

** `operation` **  
要執行的 DynamoDB 操作。若要執行 `Scan` DynamoDB 操作，這必須設為 `Scan`。此值為必填。

** `filter` **  
在傳回 DynamoDB 的結果之前，可用來篩選結果的篩選條件。如需篩選條件的詳細資訊，請參閱[篩選條件](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md)。此欄位為選用欄位。

** `index` **  
要查詢的索引名稱。除了雜湊索引鍵的主索引鍵之外，DynamoDB 查詢操作還可讓您掃描本機次要索引和全域次要索引。如果指定，這會通知 DynamoDB 查詢指定的索引。若省略，則會查詢主索引鍵索引。

** `limit` **  
單次可評估的項目數量上限。此欄位為選用欄位。

** `consistentRead` **  
布林值，指出在查詢 DynamoDB 時是否使用一致讀取。此欄位為選用，預設值為 `false`。

** `nextToken` **  
分頁字符將繼續先前的查詢。這會是從先前查詢所取得的。此欄位為選用欄位。

** `select` **  
根據預設， AWS AppSync DynamoDB 解析程式只會傳回投影到索引中的任何屬性。如果需要更多屬性，則此欄位可以設定。此欄位為選用欄位。支援的值是：    
** `ALL_ATTRIBUTES` **  
傳回所有指定資料表或索引的項目屬性。如果您查詢本機次要索引，DynamoDB 會從索引中每個相符項目的父資料表擷取整個項目。如果索引設定為投射所有項目屬性，所有資料都可從本機次要索引取得，不需進行任何擷取。  
** `ALL_PROJECTED_ATTRIBUTES` **  
只在查詢索引時才允許。擷取所有已投射到索引的屬性。如果索引設定為投射所有屬性，此傳回值相當於指定 `ALL_ATTRIBUTES`。  
**`SPECIFIC_ATTRIBUTES`**  
僅傳回 中列出的屬性`projection``expression`。此傳回值等同於指定 `projection`的 ，`expression`而不指定 的任何值`Select`。

** `totalSegments` **  
執行平行掃描時分割資料表的區段數。此欄位為選用的，但若指定 `segment`，則此欄位必須指定。

** `segment` **  
此操作中執行平行掃描時的資料表區段。此欄位為選用的，但若指定 `totalSegments`，則此欄位必須指定。

**`projection`**  
用於指定要從 DynamoDB 操作傳回之屬性的投影。如需投影的詳細資訊，請參閱[投影](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections)。此欄位為選用欄位。

DynamoDB 掃描傳回的結果會自動轉換為 GraphQL 和 JSON 基本類型，並可在映射內容中使用 (`$context.result`)。

如需 DynamoDB 類型轉換的詳細資訊，請參閱[類型系統 （回應映射）](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)。

如需回應映射範本的詳細資訊，請參閱[解析程式映射範本概觀](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview)。

結果的結構如下：

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10
}
```

欄位定義如下：

** `items` **  
包含 DynamoDB 掃描傳回項目的清單。

** `nextToken` **  
如果結果可能更多， `nextToken` 包含一個分頁字符，您可以在另一個請求中使用。 AWS AppSync 會加密和混淆從 DynamoDB 傳回的分頁字符。這樣可確保資料表的資料不會不慎洩漏給發起人。此外，這些分頁字符在不同解析程式之間無法使用。

** `scannedCount` **  
在套用篩選條件表達式 （如果有） 之前，DynamoDB 擷取的項目數量。

## 範例 1
<a name="id11"></a>

下列範例是 GraphQL 查詢的映射範本：`allPosts`。

在此範例中，資料表中的所有項目都會傳回。

```
{
    "version" : "2017-02-28",
    "operation" : "Scan"
}
```

## 範例 2
<a name="id12"></a>

下列範例是 GraphQL 查詢的映射範本：`postsMatching(title: String!)`。

在此範例中，資料表中開頭為 `title` 引數的所有項目都會傳回。

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "filter" : {
        "expression" : "begins_with(title, :title)",
        "expressionValues" : {
            ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title)
        },
    }
}
```

如需 DynamoDB `Scan` API 的詳細資訊，請參閱 [DynamoDB API 文件](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html)。