

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

# Sync
<a name="js-aws-appsync-resolver-reference-dynamodb-sync"></a>

`Sync` 請求物件可讓您從 DynamoDB 資料表擷取所有結果，然後只接收自上次查詢後變更的資料 （差異更新）。 `Sync` 請求只能對版本控制的 DynamoDB 資料來源提出。您可以指定下列項目：
+ 排除結果的篩選結果
+ 要傳回多少項目
+ 分頁字符
+ 上次起始 `Sync` 操作時

`Sync` 請求物件具有下列結構：

```
type DynamoDBSyncRequest = {
  operation: 'Sync';
  basePartitionKey?: string;
  deltaIndexName?: string;
  limit?: number;
  nextToken?: string;
  lastSync?: number;
  filter?: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
};
```

欄位定義如下：

## 同步欄位
<a name="js-sync-list"></a>

### 同步欄位清單
<a name="js-sync-list-col"></a>

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

** `filter` **  
在傳回 DynamoDB 的結果之前，可用來篩選結果的篩選條件。如需篩選條件的詳細資訊，請參閱[篩選條件](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter)。此欄位為選用欄位。

** `limit` **  
單次可評估的項目數量上限。此欄位為選用欄位。如果省略此值，預設限制將設為 `100` 個項目。此欄位的最大值為 `1000` 個項目。

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

** `lastSync` **  
上次成功啟動 `Sync` 操作的時間 (以毫秒為單位)。如果指定此值，只會傳回 `lastSync` 之後變更的項目。這個欄位是選用的，而且只有在初始 `Sync` 操作擷取所有頁面之後才能填入。如果省略此值，將傳回 *Base* 資料表的結果，否則會傳回 *Delta* 資料表的結果。

**`basePartitionKey`**  
執行`Sync`操作時使用之 *Base* 資料表的分割區索引鍵。此欄位允許在資料表使用自訂分割區索引鍵時執行`Sync`操作。此為選用欄位。

**`deltaIndexName`**  
用於 `Sync`操作的索引。當資料表使用自訂分割區索引鍵時，需要此索引才能在整個差異存放區資料表上啟用`Sync`操作。`Sync` 操作將在 GSI 上執行 （在 `gsi_ds_pk`和 上建立`gsi_ds_sk`)。此欄位為選用欄位。

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

如需 DynamoDB 類型轉換的詳細資訊，請參閱[類型系統 （回應映射）](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)。

如需 JavaScript 解析程式的詳細資訊，請參閱 [JavaScript 解析程式概觀](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html)。

結果的結構如下：

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

欄位定義如下：

** `items` **  
包含同步傳回項目的清單。

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

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

** `startedAt` **  
開始同步操作時，可以在本機存放並在另一個請求中做為 `lastSync` 引數的時間 (以 epoch 毫秒為單位)。如果請求中包含分頁字符，則該值將與請求針對第一頁結果傳回的值相同。

## 範例
<a name="js-id14"></a>

下列範例是 GraphQL 查詢的函數請求處理常式：`syncPosts(nextToken: String, lastSync: AWSTimestamp)`。

在此範例中，如果省略 `lastSync`，則會傳回 Base 資料表中的所有項目。如果提供 `lastSync`，只會傳回自 `lastSync` 變更之 Delta Sync 資料表中的項目。

```
export function request(ctx) {
  const { nextToken, lastSync } = ctx.args;
  return { operation: 'Sync', limit: 100, nextToken, lastSync };
}
```