

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AWS AppSync JavaScript referensi fungsi resolver untuk DynamoDB
<a name="js-resolver-reference-dynamodb"></a>

Fungsi AWS AppSync DynamoDB memungkinkan Anda menggunakan [GraphQL](https://graphql.org) untuk menyimpan dan mengambil data dalam tabel Amazon DynamoDB yang ada di akun Anda dengan memetakan permintaan GraphQL yang masuk ke dalam panggilan DynamoDB, lalu memetakan respons DynamoDB kembali ke GraphQL. Bagian ini menjelaskan penangan permintaan dan respons untuk operasi DynamoDB yang didukung:
+  [GetItem](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-getitem.html)- GetItem Permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat GetItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB dan apakah akan menggunakan pembacaan yang konsisten atau tidak.
+  [ PutItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-putitem.html)- Dokumen pemetaan PutItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat PutItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB, isi lengkap item (terdiri dari kunci dan attributeValues), dan kondisi agar operasi berhasil.
+  [ UpdateItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-updateitem.html)- UpdateItem Permintaan memungkinkan Anda untuk memberi tahu fungsi DynamoDB untuk membuat UpdateItem permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan kunci item di DynamoDB, ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB, dan kondisi agar operasi berhasil.
+  [ DeleteItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-deleteitem.html)- DeleteItem Permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat DeleteItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB dan kondisi agar operasi berhasil.
+  [Query](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-query.html) - Objek permintaan Query memungkinkan Anda memberi tahu penyelesai DynamoDB untuk membuat permintaan Query ke DynamoDB, dan memungkinkan Anda menentukan ekspresi kunci, indeks mana yang akan digunakan, filter tambahan, berapa banyak item yang akan dikembalikan, apakah akan menggunakan pembacaan yang konsisten, arah kueri (maju atau mundur), dan token pagination.
+  [Scan](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-scan.html) - Permintaan Scan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat permintaan Scan ke DynamoDB, dan memungkinkan Anda menentukan filter untuk mengecualikan hasil, indeks mana yang akan digunakan, berapa banyak item yang akan dikembalikan, apakah akan menggunakan pembacaan yang konsisten, token pagination, dan scan paralel.
+  [Sync](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-sync.html) - Objek permintaan Sync memungkinkan Anda mengambil semua hasil dari tabel DynamoDB dan kemudian menerima hanya data yang diubah sejak kueri terakhir Anda (pembaruan delta). Permintaan sinkronisasi hanya dapat dilakukan ke sumber data DynamoDB berversi. Anda dapat menentukan filter untuk mengecualikan hasil, berapa banyak item yang akan dikembalikan, Token pagination, dan kapan operasi Sinkronisasi terakhir Anda dimulai.
+  [ BatchGetItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-batch-get-item.html)- Objek BatchGetItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchGetItem permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk mengambil item dari dan kunci item yang akan diambil dari setiap tabel.
+  [ BatchDeleteItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-batch-delete-item.html)- Objek BatchDeleteItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchWriteItem permintaan ke DynamoDB untuk menghapus beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk menghapus item dari dan kunci item yang akan dihapus dari setiap tabel.
+  [ BatchPutItem ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-batch-put-item.html)- Objek BatchPutItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchWriteItem permintaan ke DynamoDB untuk menempatkan beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk memasukkan item dan item lengkap untuk dimasukkan ke dalam setiap tabel.
+  [ TransactGetItems ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-transact-get-items.html)- Objek TransactGetItems permintaan memungkinkan Anda untuk memberitahu fungsi DynamoDB untuk membuat TransactGetItems permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel dari setiap item permintaan untuk mengambil item dari dan kunci setiap item permintaan untuk diambil dari setiap tabel.
+  [ TransactWriteItems ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-transact-write-items.html)- Objek TransactWriteItems permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat TransactWriteItems permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel tujuan dari setiap item permintaan, operasi setiap item permintaan yang akan dilakukan, dan kunci dari setiap item permintaan untuk ditulis.
+  [Sistem tipe (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-typed-values-request.html) - Pelajari lebih lanjut tentang bagaimana pengetikan DynamoDB diintegrasikan ke dalam permintaan. AWS AppSync 
+  [Sistem tipe (pemetaan respons)](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-typed-values-responses.html) - Pelajari lebih lanjut tentang cara jenis DynamoDB dikonversi secara otomatis ke GraphQL atau JSON dalam muatan respons.
+  [Filter](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-filter.html) - Pelajari lebih lanjut tentang filter untuk operasi kueri dan pemindaian.
+  [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-condition-expressions.html) - Pelajari lebih lanjut tentang ekspresi kondisi untuk PutItem, UpdateItem, dan DeleteItem operasi.
+  [Ekspresi kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions.html) - Pelajari lebih lanjut tentang ekspresi kondisi untuk TransactWriteItems operasi.
+  [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-projections.html) - Pelajari lebih lanjut tentang cara menentukan atribut dalam operasi baca.

# GetItem
<a name="js-aws-appsync-resolver-reference-dynamodb-getitem"></a>

`GetItem`Permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `GetItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan:
+ Kunci item di DynamoDB
+ Apakah akan menggunakan bacaan yang konsisten atau tidak

`GetItem`Permintaan memiliki struktur sebagai berikut:

```
type DynamoDBGetItem = {
  operation: 'GetItem';
  key: { [key: string]: any };
  consistentRead?: ConsistentRead;
  projection?: {
    expression: string;
    expressionNames?: { [key: string]: string };
  };
};
```

Bidang didefinisikan sebagai berikut:

## GetItem bidang
<a name="js-getitem-list"></a>

### GetItem daftar bidang
<a name="js-getitem-list-col"></a>

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `GetItem` DynamoDB, ini harus diatur ke. `GetItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.

 **`consistentRead`**   
Apakah akan melakukan pembacaan yang sangat konsisten dengan DynamoDB atau tidak. Ini opsional, dan defaultnya. `false`

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections). Bidang ini bersifat opsional.

Item yang dikembalikan dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON, dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

## Contoh
<a name="js-example"></a>

Contoh berikut adalah handler permintaan fungsi untuk query GraphQL: `getThing(foo: String!, bar: String!)`

```
export function request(ctx) {
  const {foo, bar} = ctx.args
  return {
    operation : "GetItem",
    key : util.dynamodb.toMapValues({foo, bar}),
    consistentRead : true
  }
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `GetItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) API.

# PutItem
<a name="js-aws-appsync-resolver-reference-dynamodb-putitem"></a>

Dokumen pemetaan `PutItem` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `PutItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Kunci item di DynamoDB
+ Isi lengkap item (terdiri dari `key` dan`attributeValues`)
+ Kondisi agar operasi berhasil

`PutItem`Permintaan memiliki struktur sebagai berikut:

```
type DynamoDBPutItemRequest = {
  operation: 'PutItem';
  key: { [key: string]: any };
  attributeValues: { [key: string]: any};
  condition?: ConditionCheckExpression;
  customPartitionKey?: string;
  populateIndexFields?: boolean;
  _version?: number;
};
```

Bidang didefinisikan sebagai berikut:

## PutItem bidang
<a name="js-putitem-list"></a>

### PutItem daftar bidang
<a name="js-putitem-list-col"></a>

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `PutItem` DynamoDB, ini harus diatur ke. `PutItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.

 **`attributeValues`**   
Sisa atribut item yang akan dimasukkan ke DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Bidang ini bersifat opsional.

 **`condition`**   
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `PutItem` permintaan akan menimpa entri yang ada untuk item tersebut. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-condition-expressions). Nilai ini bersifat opsional.

 **`_version`**   
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional.   
Item yang ditulis ke DynamoDB secara otomatis dikonversi ke tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Item yang ditulis ke DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScriptresolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

## Contoh 1
<a name="js-example-1"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `updateThing(foo: String!, bar: String!, name: String!, version: Int!)`

Jika tidak ada item dengan kunci yang ditentukan, itu dibuat. Jika item sudah ada dengan kunci yang ditentukan, itu akan ditimpa.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, ...values} = ctx.args
  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({foo, bar}),
    attributeValues: util.dynamodb.toMapValues(values),
  };
}
```

## Contoh 2
<a name="js-example-2"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!)`

Contoh ini memverifikasi bahwa item saat ini di DynamoDB memiliki `version` bidang yang disetel ke. `expectedVersion`

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, name, expectedVersion } = ctx.args;
  const values = { name, version: expectedVersion + 1 };
  let condition = util.transform.toDynamoDBConditionExpression({
    version: { eq: expectedVersion },
  });

  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({ foo, bar }),
    attributeValues: util.dynamodb.toMapValues(values),
    condition,
  };
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `PutItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) API.

# UpdateItem
<a name="js-aws-appsync-resolver-reference-dynamodb-updateitem"></a>

`UpdateItem`Permintaan memungkinkan Anda untuk memberitahu fungsi AWS AppSync DynamoDB untuk membuat `UpdateItem` permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan yang berikut:
+ Kunci item di DynamoDB
+ Ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB
+ Kondisi agar operasi berhasil

`UpdateItem`Permintaan memiliki struktur sebagai berikut:

```
type DynamoDBUpdateItemRequest = {
  operation: 'UpdateItem';
  key: { [key: string]: any };
  update: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
  condition?: ConditionCheckExpression;
  customPartitionKey?: string;
  populateIndexFields?: boolean;
  _version?: number;
};
```

Bidang didefinisikan sebagai berikut:

## UpdateItem bidang
<a name="js-updateitem-list"></a>

### UpdateItem daftar bidang
<a name="js-updateitem-list-col"></a>

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `UpdateItem` DynamoDB, ini harus diatur ke. `UpdateItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.

 **`update`**   
`update`Bagian ini memungkinkan Anda menentukan ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi pembaruan, lihat dokumentasi [DynamoDB UpdateExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html). Bagian ini diperlukan.  
`update`Bagian ini memiliki tiga komponen:    
** `expression` **  
Ekspresi pembaruan. Nilai ini diperlukan.  
** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam`expression`, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`  
** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

 **`condition`**   
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `UpdateItem` permintaan akan memperbarui entri yang ada terlepas dari statusnya saat ini. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-condition-expressions). Nilai ini bersifat opsional.

 **`_version`**   
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional.

Item yang diperbarui di DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

## Contoh 1
<a name="js-id3"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `upvote(id: ID!)`

Dalam contoh ini, item di DynamoDB memiliki `version` dan `upvotes` bidangnya bertambah 1.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { id } = ctx.args;
  return {
    operation: 'UpdateItem',
    key: util.dynamodb.toMapValues({ id }),
    update: {
      expression: 'ADD #votefield :plusOne, version :plusOne',
      expressionNames: { '#votefield': 'upvotes' },
      expressionValues: { ':plusOne': { N: 1 } },
    },
  };
}
```

## Contoh 2
<a name="js-id4"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `updateItem(id: ID!, title: String, author: String, expectedVersion: Int!)`

Ini adalah contoh kompleks yang memeriksa argumen dan secara dinamis menghasilkan ekspresi pembaruan yang hanya mencakup argumen yang telah disediakan oleh klien. Misalnya, jika `title` dan `author` dihilangkan, mereka tidak diperbarui. Jika argumen ditentukan tetapi nilainya`null`, maka bidang itu dihapus dari objek di DynamoDB. Akhirnya, operasi memiliki kondisi, yang memverifikasi apakah item saat ini di DynamoDB memiliki `version` bidang yang disetel ke: `expectedVersion`

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { args: { input: { id, ...values } } } = ctx;

  const condition = {
    id: { attributeExists: true },
    version: { eq: values.expectedVersion },
  };
  values.expectedVersion += 1;
  return dynamodbUpdateRequest({ keys: { id }, values, condition });
}


/**
 * Helper function to update an item
 * @returns an UpdateItem request
 */
function dynamodbUpdateRequest(params) {
  const { keys, values, condition: inCondObj } = params;

  const sets = [];
  const removes = [];
  const expressionNames = {};
  const expValues = {};

  // Iterate through the keys of the values
  for (const [key, value] of Object.entries(values)) {
    expressionNames[`#${key}`] = key;
    if (value) {
      sets.push(`#${key} = :${key}`);
      expValues[`:${key}`] = value;
    } else {
      removes.push(`#${key}`);
    }
  }

  let expression = sets.length ? `SET ${sets.join(', ')}` : '';
  expression += removes.length ? ` REMOVE ${removes.join(', ')}` : '';

  const condition = JSON.parse(
    util.transform.toDynamoDBConditionExpression(inCondObj)
  );

  return {
    operation: 'UpdateItem',
    key: util.dynamodb.toMapValues(keys),
    condition,
    update: {
      expression,
      expressionNames,
      expressionValues: util.dynamodb.toMapValues(expValues),
    },
  };
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `UpdateItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) API.

# DeleteItem
<a name="js-aws-appsync-resolver-reference-dynamodb-deleteitem"></a>

`DeleteItem`Permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `DeleteItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan yang berikut:
+ Kunci item di DynamoDB
+ Kondisi agar operasi berhasil

`DeleteItem`Permintaan memiliki struktur sebagai berikut:

```
type DynamoDBDeleteItemRequest = {
  operation: 'DeleteItem';
  key: { [key: string]: any };
  condition?: ConditionCheckExpression;
  customPartitionKey?: string;
  populateIndexFields?: boolean;
  _version?: number;
};
```

Bidang didefinisikan sebagai berikut:

## DeleteItem bidang
<a name="js-deleteitem-list"></a>

### DeleteItem daftar bidang
<a name="js-deleteitem-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `DeleteItem` DynamoDB, ini harus diatur ke. `DeleteItem` Nilai ini diperlukan.

** `key` **  
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.

** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `DeleteItem` permintaan menghapus item terlepas dari keadaan saat ini. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-condition-expressions). Nilai ini bersifat opsional.

** `_version` **  
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional. 

Item yang dihapus dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

## Contoh 1
<a name="js-id6"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `deleteItem(id: ID!)` Jika ada item dengan ID ini, item tersebut akan dihapus.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  return {
    operation: 'DeleteItem',
    key: util.dynamodb.toMapValues({ id: ctx.args.id }),
  };
}
```

## Contoh 2
<a name="js-id7"></a>

Contoh berikut adalah penangan permintaan fungsi untuk mutasi GraphQL. `deleteItem(id: ID!, expectedVersion: Int!)` Jika ada item dengan ID ini, item tersebut akan dihapus, tetapi hanya jika `version` bidangnya disetel ke`expectedVersion`:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { id, expectedVersion } = ctx.args;
  const condition = {
    id: { attributeExists: true },
    version: { eq: expectedVersion },
  };
  return {
    operation: 'DeleteItem',
    key: util.dynamodb.toMapValues({ id }),
    condition: util.transform.toDynamoDBConditionExpression(condition),
  };
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `DeleteItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html) API.

# Kueri
<a name="js-aws-appsync-resolver-reference-dynamodb-query"></a>

Objek `Query` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `Query` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan yang berikut:
+ Ekspresi kunci
+ Indeks mana yang akan digunakan
+ Filter tambahan apa pun
+ Berapa banyak item yang akan dikembalikan
+ Apakah akan menggunakan pembacaan yang konsisten
+ arah kueri (maju atau mundur)
+ Token pagination

Objek `Query` permintaan memiliki struktur berikut:

```
type DynamoDBQueryRequest = {
  operation: 'Query';
  query: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
  index?: string;
  nextToken?: string;
  limit?: number;
  scanIndexForward?: boolean;
  consistentRead?: boolean;
  select?: 'ALL_ATTRIBUTES' | 'ALL_PROJECTED_ATTRIBUTES' | 'SPECIFIC_ATTRIBUTES';
  filter?: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
  projection?: {
    expression: string;
    expressionNames?: { [key: string]: string };
  };
};
```

Bidang didefinisikan sebagai berikut:

## Bidang kueri
<a name="js-query-list"></a>

### Daftar bidang kueri
<a name="js-query-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `Query` DynamoDB, ini harus diatur ke. `Query` Nilai ini diperlukan.

** `query` **  
`query`Bagian ini memungkinkan Anda menentukan ekspresi kondisi kunci yang menjelaskan item mana yang akan diambil dari DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi kunci, lihat dokumentasi [DynamoDB KeyConditions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.KeyConditions.html). Bagian ini harus ditentukan.    
** `expression` **  
Ekspresi kueri. Bidang ini harus ditentukan.  
** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam`expression`, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`  
** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

** `filter` **  
Filter tambahan yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter). Bidang ini bersifat opsional.

** `index` **  
Nama indeks untuk query. Operasi query DynamoDB memungkinkan Anda untuk memindai Indeks Sekunder Lokal dan Indeks Sekunder Global selain indeks kunci utama untuk kunci hash. Jika ditentukan, ini memberitahu DynamoDB untuk query indeks tertentu. Jika dihilangkan, indeks kunci utama ditanyakan.

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `limit` **  
Jumlah maksimum item untuk dievaluasi (tidak selalu merupakan jumlah item yang cocok). Bidang ini bersifat opsional.

** `scanIndexForward` **  
Boolean yang menunjukkan apakah akan melakukan kueri maju atau mundur. Bidang ini opsional, dan defaultnya. `true`

** `consistentRead` **  
Boolean yang menunjukkan apakah akan menggunakan pembacaan yang konsisten saat menanyakan DynamoDB. Bidang ini opsional, dan defaultnya. `false`

** `select` **  
Secara default, AWS AppSync DynamoDB resolver hanya mengembalikan atribut yang diproyeksikan ke dalam indeks. Jika lebih banyak atribut diperlukan, Anda dapat mengatur bidang ini. Bidang ini bersifat opsional. Nilai yang didukung adalah:    
** `ALL_ATTRIBUTES` **  
Mengembalikan semua atribut item dari tabel tertentu atau indeks. Jika Anda menanyakan indeks sekunder lokal, DynamoDB mengambil seluruh item dari tabel induk untuk setiap item yang cocok dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut item, semua data dapat diperoleh dari indeks sekunder lokal dan tidak diperlukan pengambilan.  
** `ALL_PROJECTED_ATTRIBUTES` **  
Diizinkan hanya saat menanyakan indeks. Mengambil semua atribut yang telah diproyeksikan ke dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut, nilai pengembalian ini setara dengan menentukan`ALL_ATTRIBUTES`.  
**`SPECIFIC_ATTRIBUTES`**  
Mengembalikan hanya atribut yang tercantum dalam `projection`'s`expression`. Nilai pengembalian ini setara dengan menentukan `projection`'s `expression` tanpa menentukan nilai apa pun untuk. `Select`

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hasil dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

Hasilnya memiliki struktur sebagai berikut:

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

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh query DynamoDB.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. Perhatikan bahwa AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Perhatikan juga bahwa token pagination ini tidak dapat digunakan di berbagai fungsi atau resolver.

** `scannedCount` **  
Jumlah item yang cocok dengan ekspresi kondisi kueri, sebelum ekspresi filter (jika ada) diterapkan.

## Contoh
<a name="js-id9"></a>

Contoh berikut adalah handler permintaan fungsi untuk query GraphQL. `getPosts(owner: ID!)`

Dalam contoh ini, indeks sekunder global pada tabel ditanyakan untuk mengembalikan semua posting yang dimiliki oleh ID yang ditentukan.

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { owner } = ctx.args;
  return {
    operation: 'Query',
    query: {
      expression: 'ownerId = :ownerId',
      expressionValues: util.dynamodb.toMapValues({ ':ownerId': owner }),
    },
    index: 'owner-index',
  };
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `Query` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html) API.

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

`Scan`Permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `Scan` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan yang berikut:
+ Filter untuk mengecualikan hasil
+ Indeks mana yang akan digunakan
+ Berapa banyak item yang akan dikembalikan
+ Apakah akan menggunakan pembacaan yang konsisten
+ Token pagination
+ Pemindaian paralel

Objek `Scan` permintaan memiliki struktur berikut:

```
type DynamoDBScanRequest = {
  operation: 'Scan';
  index?: string;
  limit?: number;
  consistentRead?: boolean;
  nextToken?: string;
  totalSegments?: number;
  segment?: number;
  filter?: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
  projection?: {
    expression: string;
    expressionNames?: { [key: string]: string };
  };
};
```

Bidang didefinisikan sebagai berikut:

## Pindai bidang
<a name="js-scan-list"></a>

### Pindai daftar bidang
<a name="js-scan-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `Scan` DynamoDB, ini harus diatur ke. `Scan` Nilai ini diperlukan.

** `filter` **  
Filter yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter). Bidang ini bersifat opsional.

** `index` **  
Nama indeks untuk query. Operasi query DynamoDB memungkinkan Anda untuk memindai Indeks Sekunder Lokal dan Indeks Sekunder Global selain indeks kunci utama untuk kunci hash. Jika ditentukan, ini memberitahu DynamoDB untuk query indeks tertentu. Jika dihilangkan, indeks kunci utama ditanyakan.

** `limit` **  
Jumlah maksimum item untuk dievaluasi pada satu waktu. Bidang ini bersifat opsional.

** `consistentRead` **  
Boolean yang menunjukkan apakah akan menggunakan pembacaan yang konsisten saat menanyakan DynamoDB. Bidang ini opsional, dan defaultnya. `false`

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `select` **  
Secara default, fungsi AWS AppSync DynamoDB hanya mengembalikan atribut apa pun yang diproyeksikan ke dalam indeks. Jika lebih banyak atribut diperlukan, maka bidang ini dapat diatur. Bidang ini bersifat opsional. Nilai yang didukung adalah:    
** `ALL_ATTRIBUTES` **  
Mengembalikan semua atribut item dari tabel tertentu atau indeks. Jika Anda menanyakan indeks sekunder lokal, DynamoDB mengambil seluruh item dari tabel induk untuk setiap item yang cocok dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut item, semua data dapat diperoleh dari indeks sekunder lokal dan tidak diperlukan pengambilan.  
** `ALL_PROJECTED_ATTRIBUTES` **  
Diizinkan hanya saat menanyakan indeks. Mengambil semua atribut yang telah diproyeksikan ke dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut, nilai pengembalian ini setara dengan menentukan`ALL_ATTRIBUTES`.  
**`SPECIFIC_ATTRIBUTES`**  
Mengembalikan hanya atribut yang tercantum dalam `projection`'s`expression`. Nilai pengembalian ini setara dengan menentukan `projection`'s `expression` tanpa menentukan nilai apa pun untuk. `Select`

** `totalSegments` **  
Jumlah segmen untuk mempartisi tabel dengan saat melakukan pemindaian paralel. Bidang ini opsional, tetapi harus ditentukan jika `segment` ditentukan.

** `segment` **  
Segmen tabel dalam operasi ini saat melakukan pemindaian paralel. Bidang ini opsional, tetapi harus ditentukan jika `totalSegments` ditentukan.

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hasil yang dikembalikan oleh pemindaian DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

Hasilnya memiliki struktur sebagai berikut:

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

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh pemindaian DynamoDB.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Selain itu, token pagination ini tidak dapat digunakan di berbagai fungsi atau resolver.

** `scannedCount` **  
Jumlah item yang diambil oleh DynamoDB sebelum ekspresi filter (jika ada) diterapkan.

## Contoh 1
<a name="js-id11"></a>

Contoh berikut adalah handler permintaan fungsi untuk query GraphQL:. `allPosts`

Dalam contoh ini, semua entri dalam tabel dikembalikan.

```
export function request(ctx) {
  return { operation: 'Scan' };
}
```

## Contoh 2
<a name="js-id12"></a>

Contoh berikut adalah handler permintaan fungsi untuk query GraphQL:. `postsMatching(title: String!)`

Dalam contoh ini, semua entri dalam tabel dikembalikan di mana judul dimulai dengan `title` argumen.

```
export function request(ctx) {
  const { title } = ctx.args;
  const filter = { filter: { beginsWith: title } };
  return {
    operation: 'Scan',
    filter: JSON.parse(util.transform.toDynamoDBFilterExpression(filter)),
  };
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `Scan` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html) API.

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

Objek `Sync` permintaan memungkinkan Anda mengambil semua hasil dari tabel DynamoDB dan kemudian hanya menerima data yang diubah sejak kueri terakhir Anda (pembaruan delta). `Sync`permintaan hanya dapat dibuat ke sumber data DynamoDB berversi. Anda dapat menentukan sebagai berikut:
+ Filter untuk mengecualikan hasil
+ Berapa banyak item yang akan dikembalikan
+ Token Paginasi
+ Ketika `Sync` operasi terakhir Anda dimulai

Objek `Sync` permintaan memiliki struktur berikut:

```
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 };
  };
};
```

Bidang didefinisikan sebagai berikut:

## Bidang sinkronisasi
<a name="js-sync-list"></a>

### Daftar bidang sinkronisasi
<a name="js-sync-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan `Sync` operasi, ini harus diatur ke`Sync`. Nilai ini diperlukan.

** `filter` **  
Filter yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter). Bidang ini bersifat opsional.

** `limit` **  
Jumlah maksimum item untuk dievaluasi pada satu waktu. Bidang ini bersifat opsional. Jika dihilangkan, batas default akan diatur ke `100` item. Nilai maksimum untuk bidang ini adalah `1000` item.

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `lastSync` **  
Momen, dalam milidetik zaman, ketika `Sync` operasi sukses terakhir dimulai. Jika ditentukan, hanya item yang telah berubah setelah `lastSync` dikembalikan. Bidang ini opsional, dan hanya boleh diisi setelah mengambil semua halaman dari operasi awal`Sync`. Jika dihilangkan, hasil dari tabel *Base* akan dikembalikan, jika tidak, hasil dari tabel *Delta* akan dikembalikan.

**`basePartitionKey`**  
Kunci partisi dari tabel *Basis* yang digunakan saat melakukan `Sync` operasi. Bidang ini memungkinkan `Sync` operasi yang akan dilakukan ketika tabel menggunakan kunci partisi kustom. Ini adalah bidang opsional.

**`deltaIndexName`**  
Indeks yang digunakan untuk `Sync` operasi. Indeks ini diperlukan untuk mengaktifkan `Sync` operasi di seluruh tabel penyimpanan delta saat tabel menggunakan kunci partisi khusus. `Sync`Operasi akan dilakukan pada GSI (dibuat pada `gsi_ds_pk` dan`gsi_ds_sk`). Bidang ini bersifat opsional.

Hasil yang dikembalikan oleh sinkronisasi DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam hasil konteks (). `context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)pemetaan respons).

Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar [JavaScript resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html).

Hasilnya memiliki struktur sebagai berikut:

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

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh sinkronisasi.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Selain itu, token pagination ini tidak dapat digunakan di berbagai fungsi atau resolver.

** `scannedCount` **  
Jumlah item yang diambil oleh DynamoDB sebelum ekspresi filter (jika ada) diterapkan.

** `startedAt` **  
Saat ini, dalam milidetik epoch, ketika operasi sinkronisasi dimulai yang dapat Anda simpan secara lokal dan gunakan dalam permintaan lain sebagai argumen Anda. `lastSync` Jika token pagination disertakan dalam permintaan, nilai ini akan sama dengan yang dikembalikan oleh permintaan untuk halaman pertama hasil.

## Contoh
<a name="js-id14"></a>

Contoh berikut adalah handler permintaan fungsi untuk query GraphQL:. `syncPosts(nextToken: String, lastSync: AWSTimestamp)`

Dalam contoh ini, jika `lastSync` dihilangkan, semua entri dalam tabel dasar dikembalikan. Jika `lastSync` disediakan, hanya entri dalam tabel sinkronisasi delta yang telah berubah sejak itu `lastSync` dikembalikan.

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

# BatchGetItem
<a name="js-aws-appsync-resolver-reference-dynamodb-batch-get-item"></a>

Objek `BatchGetItem` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `BatchGetItem` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat untuk mengambil item dari
+ Kunci item untuk mengambil dari setiap tabel

Batas `BatchGetItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Objek `BatchGetItem` permintaan memiliki struktur berikut:

```
type DynamoDBBatchGetItemRequest = {
  operation: 'BatchGetItem';
  tables: {
    [tableName: string]: {
      keys: { [key: string]: any }[];
      consistentRead?: boolean; 
      projection?: {
        expression: string;
        expressionNames?: { [key: string]: string };
      };
    };
  };
};
```

Bidang didefinisikan sebagai berikut:

## BatchGetItem bidang
<a name="js-BatchGetItem-list"></a>

### BatchGetItem daftar bidang
<a name="js-BatchGetItem-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchGetItem` DynamoDB, ini harus diatur ke. `BatchGetItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk mengambil item dari. Nilainya adalah peta di mana nama tabel ditentukan sebagai kunci peta. Setidaknya satu meja harus disediakan. `tables`Nilai ini diperlukan.    
** `keys` **  
Daftar kunci DynamoDB yang mewakili kunci utama item yang akan diambil. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request).  
** `consistentRead` **  
Apakah akan menggunakan pembacaan yang konsisten saat menjalankan *GetItem*operasi. *Nilai ini opsional dan default ke false.*  
**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hal-hal yang perlu diingat:
+ Jika item belum diambil dari tabel, elemen *null* muncul di blok data untuk tabel itu.
+ Hasil pemanggilan diurutkan per tabel, berdasarkan urutan di mana mereka disediakan di dalam objek permintaan.
+ Setiap `Get` perintah di dalam a `BatchGetItem` adalah atom, namun, batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchGetItem`terbatas pada 100 kunci.

Untuk contoh berikut fungsi request handler:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'BatchGetItem',
    tables: {
      authors: [util.dynamodb.toMapValues({ authorId })],
      posts: [util.dynamodb.toMapValues({ authorId, postId })],
    },
  };
}
```

Hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [null],
     "posts": [
        // Was retrieved
        {
          "authorId": "a1",
          "postId": "p2",
          "postTitle": "title",
          "postDescription": "description",
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        // This item was not processed due to an error
        {
          "authorId": "a1"
        }
      ],
     "posts": []
   }
}
```

`ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap tombol tabel yang disediakan dalam hasil dalam objek permintaan fungsi dijamin akan hadir dalam hasil pemanggilan. Item yang telah dihapus muncul di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnprocessedKeys**.

# BatchDeleteItem
<a name="js-aws-appsync-resolver-reference-dynamodb-batch-delete-item"></a>

Objek `BatchDeleteItem` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menghapus beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat menghapus item
+ Kunci item yang akan dihapus dari setiap tabel

Batas `BatchWriteItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Objek `BatchDeleteItem` permintaan memiliki struktur berikut:

```
type DynamoDBBatchDeleteItemRequest = {
  operation: 'BatchDeleteItem';
  tables: {
    [tableName: string]: { [key: string]: any }[];
  };
};
```

Bidang didefinisikan sebagai berikut:

## BatchDeleteItem bidang
<a name="js-BatchDeleteItem-list"></a>

### BatchDeleteItem daftar bidang
<a name="js-BatchDeleteItem-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchDeleteItem` DynamoDB, ini harus diatur ke. `BatchDeleteItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk menghapus item dari. Setiap tabel adalah daftar kunci DynamoDB yang mewakili kunci utama item yang akan dihapus. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Setidaknya satu meja harus disediakan. `tables`Nilai diperlukan.

Hal-hal yang perlu diingat:
+ Berlawanan dengan `DeleteItem` operasi, item yang dihapus sepenuhnya tidak dikembalikan dalam respons. Hanya kunci yang dilewati yang dikembalikan.
+ Jika item belum dihapus dari tabel, elemen *null* muncul di blok data untuk tabel itu.
+ Hasil pemanggilan diurutkan per tabel, berdasarkan urutan di mana mereka disediakan di dalam objek permintaan.
+ Setiap `Delete` perintah di dalam a `BatchDeleteItem` adalah atom. Namun batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchDeleteItem`terbatas pada 25 kunci.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh berikut fungsi request handler:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'BatchDeleteItem',
    tables: {
      authors: [util.dynamodb.toMapValues({ authorId })],
      posts: [util.dynamodb.toMapValues({ authorId, postId })],
    },
  };
}
```

Hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [null],
     "posts": [
        // Was deleted
        {
          "authorId": "a1",
          "postId": "p2"
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        // This key was not processed due to an error
        {
          "authorId": "a1"
        }
      ],
     "posts": []
   }
}
```

`ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap tombol tabel yang disediakan dalam objek permintaan fungsi dijamin akan hadir dalam hasil pemanggilan. Item yang telah dihapus ada di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnprocessedKeys**.

# BatchPutItem
<a name="js-aws-appsync-resolver-reference-dynamodb-batch-put-item"></a>

Objek `BatchPutItem` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menempatkan beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat meletakkan item
+ Item lengkap untuk dimasukkan ke dalam setiap tabel

Batas `BatchWriteItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Objek `BatchPutItem` permintaan memiliki struktur berikut:

```
type DynamoDBBatchPutItemRequest = {
  operation: 'BatchPutItem';
  tables: {
    [tableName: string]: { [key: string]: any}[];
  };
};
```

Bidang didefinisikan sebagai berikut:

## BatchPutItem bidang
<a name="js-BatchPutItem-list"></a>

### BatchPutItem daftar bidang
<a name="js-BatchPutItem-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchPutItem` DynamoDB, ini harus diatur ke. `BatchPutItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk menempatkan item di. Setiap entri tabel mewakili daftar item DynamoDB untuk disisipkan untuk tabel khusus ini. Setidaknya satu meja harus disediakan. Nilai ini diperlukan.

Hal-hal yang perlu diingat:
+ Item yang disisipkan sepenuhnya dikembalikan dalam respons, jika berhasil.
+ Jika item belum dimasukkan dalam tabel, elemen *null* ditampilkan di blok data untuk tabel tersebut.
+ Item yang disisipkan diurutkan per tabel, berdasarkan urutan di mana mereka disediakan di dalam objek permintaan.
+ Setiap `Put` perintah di dalam a `BatchPutItem` adalah atom, namun, batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchPutItem`terbatas pada 25 item.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh berikut fungsi request handler:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId, name, title } = ctx.args;
  return {
    operation: 'BatchPutItem',
    tables: {
      authors: [util.dynamodb.toMapValues({ authorId, name })],
      posts: [util.dynamodb.toMapValues({ authorId, postId, title })],
    },
  };
}
```

Hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [
         null
     ],
     "posts": [
        // Was inserted
        {
          "authorId": "a1",
          "postId": "p2",
          "title": "title"
        }
     ]
   },
   "unprocessedItems": {
     "authors": [
        // This item was not processed due to an error
        {
          "authorId": "a1",
          "name": "a1_name"
        }
      ],
     "posts": []
   }
}
```

`ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessEditems**, dan setiap kunci tabel yang disediakan dalam objek permintaan dijamin akan hadir dalam hasil pemanggilan. Item yang telah dimasukkan ada di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnProcessEditems**.

# TransactGetItems
<a name="js-aws-appsync-resolver-reference-dynamodb-transact-get-items"></a>

Objek `TransactGetItems` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `TransactGetItems` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel dari setiap item permintaan tempat untuk mengambil item dari
+ Kunci dari setiap item permintaan untuk diambil dari setiap tabel

Batas `TransactGetItems` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Objek `TransactGetItems` permintaan memiliki struktur berikut:

```
type DynamoDBTransactGetItemsRequest = {
  operation: 'TransactGetItems';
  transactItems: { table: string; key: { [key: string]: any }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }[];
  };
};
```

Bidang didefinisikan sebagai berikut:

## TransactGetItems bidang
<a name="js-TransactGetItems-list"></a>

### TransactGetItems daftar bidang
<a name="js-TransactGetItems-list-col"></a>

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `TransactGetItems` DynamoDB, ini harus diatur ke. `TransactGetItems` Nilai ini diperlukan.

** `transactItems` **  
Item permintaan untuk disertakan. Nilainya adalah array item permintaan. Setidaknya satu item permintaan harus disediakan. `transactItems`Nilai ini diperlukan.    
** `table` **  
Tabel DynamoDB untuk mengambil item dari. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diambil. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request).  
**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hal-hal yang perlu diingat:
+ Jika transaksi berhasil, urutan item yang diambil di `items` blok akan sama dengan urutan item permintaan.
+ Transaksi dilakukan dengan all-or-nothing cara tertentu. Jika ada item permintaan yang menyebabkan kesalahan, seluruh transaksi tidak akan dilakukan dan rincian kesalahan akan dikembalikan.
+ Item permintaan yang tidak dapat diambil bukanlah kesalahan. Sebagai gantinya, elemen *null* muncul di blok *item* di posisi yang sesuai.
+ Jika kesalahan transaksi adalah *TransactionCanceledException*, `cancellationReasons` blok akan diisi. Urutan alasan pembatalan di `cancellationReasons` blok akan sama dengan urutan item permintaan.
+  `TransactGetItems`terbatas pada 100 item permintaan.

Untuk contoh berikut fungsi request handler:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'TransactGetItems',
    transactItems: [
      {
        table: 'posts',
        key: util.dynamodb.toMapValues({ postId }),
      },
      {
        table: 'authors',
        key: util.dynamodb.toMapValues({ authorId }),
      },
    ],
  };
}
```

Jika transaksi berhasil dan hanya item yang diminta pertama yang diambil, hasil pemanggilan yang tersedia adalah sebagai berikut: `ctx.result`

```
{
    "items": [
       {
           // Attributes of the first requested item
           "post_id": "p1",
           "post_title": "title",
           "post_description": "description"
       },
       // Could not retrieve the second requested item
       null,
    ],
    "cancellationReasons": null
}
```

Jika transaksi gagal karena *TransactionCanceledException*disebabkan oleh item permintaan pertama, hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
    "items": null,
    "cancellationReasons": [
       {
           "type":"Sample error type",
           "message":"Sample error message"
       },
       {
           "type":"None",
           "message":"None"
       }
    ]
}
```

`ctx.error`Berisi rincian tentang kesalahan. **Item** kunci dan **CancellationReasons** dijamin akan hadir di. `ctx.result`

# TransactWriteItems
<a name="js-aws-appsync-resolver-reference-dynamodb-transact-write-items"></a>

Objek `TransactWriteItems` permintaan memungkinkan Anda memberi tahu fungsi AWS AppSync DynamoDB untuk membuat `TransactWriteItems` permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tujuan dari setiap item permintaan
+ Pengoperasian setiap item permintaan untuk dilakukan. Ada empat jenis operasi yang didukung: *PutItem*, *UpdateItem*, *DeleteItem*, dan *ConditionCheck* 
+ Kunci dari setiap item permintaan untuk menulis

Batas DynamoDB `TransactWriteItems` berlaku.

Objek `TransactWriteItems` permintaan memiliki struktur berikut:

```
type DynamoDBTransactWriteItemsRequest = {
  operation: 'TransactWriteItems';
  transactItems: TransactItem[];
};
type TransactItem =
  | TransactWritePutItem
  | TransactWriteUpdateItem
  | TransactWriteDeleteItem
  | TransactWriteConditionCheckItem;
type TransactWritePutItem = {
  table: string;
  operation: 'PutItem';
  key: { [key: string]: any };
  attributeValues: { [key: string]: string};
  condition?: TransactConditionCheckExpression;
};
type TransactWriteUpdateItem = {
  table: string;
  operation: 'UpdateItem';
  key: { [key: string]: any };
  update: DynamoDBExpression;
  condition?: TransactConditionCheckExpression;
};
type TransactWriteDeleteItem = {
  table: string;
  operation: 'DeleteItem';
  key: { [key: string]: any };
  condition?: TransactConditionCheckExpression;
};
type TransactWriteConditionCheckItem = {
  table: string;
  operation: 'ConditionCheck';
  key: { [key: string]: any };
  condition?: TransactConditionCheckExpression;
};
type TransactConditionCheckExpression = {
  expression: string;
  expressionNames?: { [key: string]: string};
  expressionValues?: { [key: string]: any};
  returnValuesOnConditionCheckFailure: boolean;
};
```

## TransactWriteItems bidang
<a name="js-TransactWriteItems-list"></a>

### TransactWriteItems daftar bidang
<a name="js-TransactWriteItems-list-col"></a>

**Bidang didefinisikan sebagai berikut: **    
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `TransactWriteItems` DynamoDB, ini harus diatur ke. `TransactWriteItems` Nilai ini diperlukan.  
** `transactItems` **  
Item permintaan untuk disertakan. Nilainya adalah array item permintaan. Setidaknya satu item permintaan harus disediakan. `transactItems`Nilai ini diperlukan.  
Untuk`PutItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB tujuan. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `PutItem` DynamoDB, ini harus diatur ke. `PutItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diletakkan. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `attributeValues` **  
Sisa atribut item yang akan dimasukkan ke DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Bidang ini bersifat opsional.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `PutItem` permintaan akan menimpa entri yang ada untuk item tersebut. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`UpdateItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memperbarui. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `UpdateItem` DynamoDB, ini harus diatur ke. `UpdateItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diperbarui. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `update` **  
`update`Bagian ini memungkinkan Anda menentukan ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi pembaruan, lihat dokumentasi [DynamoDB UpdateExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html). Bagian ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `UpdateItem` permintaan akan memperbarui entri yang ada terlepas dari statusnya saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`DeleteItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk menghapus item. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `DeleteItem` DynamoDB, ini harus diatur ke. `DeleteItem` Nilai ini diperlukan.  
** `key` **  
Tombol DynamoDB mewakili kunci utama item yang akan dihapus. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `DeleteItem` permintaan menghapus item terlepas dari keadaan saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini bersifat opsional.
Untuk`ConditionCheck`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memeriksa kondisi. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `ConditionCheck` DynamoDB, ini harus diatur ke. `ConditionCheck` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item untuk pemeriksaan kondisi. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions). Nilai ini diperlukan.

Hal-hal yang perlu diingat:
+ Hanya kunci item permintaan yang dikembalikan dalam respons, jika berhasil. Urutan kunci akan sama dengan urutan item permintaan.
+ Transaksi dilakukan dengan all-or-nothing cara tertentu. Jika ada item permintaan yang menyebabkan kesalahan, seluruh transaksi tidak akan dilakukan dan rincian kesalahan akan dikembalikan.
+ Tidak ada dua item permintaan yang dapat menargetkan item yang sama. Kalau tidak, mereka akan menyebabkan *TransactionCanceledException*kesalahan.
+ Jika kesalahan transaksi adalah *TransactionCanceledException*, `cancellationReasons` blok akan diisi. Jika pemeriksaan kondisi item permintaan gagal **dan** Anda tidak `returnValuesOnConditionCheckFailure` menentukan`false`, item yang ada di tabel akan diambil dan disimpan `item` di posisi `cancellationReasons` blok yang sesuai.
+  `TransactWriteItems`terbatas pada 100 item permintaan.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh berikut fungsi request handler:

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId, title, description, oldTitle, authorName } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'PutItem',
        key: util.dynamodb.toMapValues({ postId }),
        attributeValues: util.dynamodb.toMapValues({ title, description }),
        condition: util.transform.toDynamoDBConditionExpression({
          title: { eq: oldTitle },
        }),
      },
      {
        table: 'authors',
        operation: 'UpdateItem',
        key: util.dynamodb.toMapValues({ authorId }),
        update: {
          expression: 'SET authorName = :name',
          expressionValues: util.dynamodb.toMapValues({ ':name': authorName }),
        },
      },
    ],
  };
}
```

Jika transaksi berhasil, hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
    "keys": [
       // Key of the PutItem request
       {
           "post_id": "p1",
       },
       // Key of the UpdateItem request
       {
           "author_id": "a1"
       }
    ],
    "cancellationReasons": null
}
```

Jika transaksi gagal karena kegagalan pemeriksaan kondisi `PutItem` permintaan, hasil pemanggilan yang tersedia `ctx.result` adalah sebagai berikut:

```
{
    "keys": null,
    "cancellationReasons": [
       {
           "item": {
               "post_id": "p1",
               "post_title": "Actual old title",
               "post_description": "Old description"
           },
           "type": "ConditionCheckFailed",
           "message": "The condition check failed."
       },
       {
           "type": "None",
           "message": "None"
       }
    ]
}
```

`ctx.error`Berisi rincian tentang kesalahan. Kunci **kunci** dan **CancellationReasons** dijamin akan ada di. `ctx.result`

# Jenis sistem (pemetaan permintaan)
<a name="js-aws-appsync-resolver-reference-dynamodb-typed-values-request"></a>

Saat menggunakan fungsi AWS AppSync DynamoDB untuk memanggil tabel DynamoDB Anda AWS AppSync , perlu mengetahui jenis setiap nilai yang akan digunakan dalam panggilan itu. Ini karena DynamoDB mendukung lebih banyak tipe primitif daripada GraphQL atau JSON (seperti set dan data biner). AWS AppSync membutuhkan beberapa petunjuk saat menerjemahkan antara GraphQL dan DynamoDB, jika tidak maka harus membuat beberapa asumsi tentang bagaimana data disusun dalam tabel Anda.

[Untuk informasi selengkapnya tentang tipe data DynamoDB, lihat deskriptor tipe Data DynamoDB dan [dokumentasi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html#Programming.LowLevelAPI.DataTypeDescriptors) tipe data.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes)

Nilai DynamoDB diwakili oleh objek JSON yang berisi pasangan kunci-nilai tunggal. Kunci menentukan jenis DynamoDB, dan nilai menentukan nilai itu sendiri. Dalam contoh berikut, kunci `S` menunjukkan bahwa nilainya adalah string, dan nilainya `identifier` adalah nilai string itu sendiri.

```
{ "S" : "identifier" }
```

Perhatikan bahwa objek JSON tidak dapat memiliki lebih dari satu pasangan kunci-nilai. Jika lebih dari satu pasangan kunci-nilai ditentukan, objek permintaan tidak diuraikan.

Nilai DynamoDB digunakan di mana saja dalam objek permintaan di mana Anda perlu menentukan nilai. Beberapa tempat di mana Anda perlu melakukan ini termasuk: `key` dan `attributeValue` bagian, dan `expressionValues` bagian dari bagian ekspresi. Dalam contoh berikut, `identifier` nilai DynamoDB String sedang ditetapkan ke bidang `id` di bagian (mungkin dalam `key` `GetItem` objek permintaan).

```
"key" : {
   "id" : { "S" : "identifier" }
}
```

 **Tipe yang Didukung** 

AWS AppSync mendukung skalar DynamoDB, dokumen, dan jenis set berikut:

**Jenis string `S` **  
Nilai string tunggal. Nilai DynamoDB String dilambangkan dengan:  

```
{ "S" : "some string" }
```
Contoh penggunaan adalah:  

```
"key" : {
   "id" : { "S" : "some string" }
}
```

**Jenis set string `SS` **  
Satu set nilai string. Nilai DynamoDB String Set dilambangkan dengan:  

```
{ "SS" : [ "first value", "second value", ... ] }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] }
}
```

**Jenis nomor `N` **  
Nilai numerik tunggal. Nilai DynamoDB Number dilambangkan dengan:  

```
{ "N" : 1234 }
```
Contoh penggunaan adalah:  

```
"expressionValues" : {
   ":expectedVersion" : { "N" : 1 }
}
```

**Jenis set nomor `NS` **  
Satu set nilai angka. Nilai DynamoDB Number Set dilambangkan dengan:  

```
{ "NS" : [ 1, 2.3, 4 ... ] }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] }
}
```

**Tipe biner `B` **  
Nilai biner. Nilai biner DynamoDB dilambangkan dengan:  

```
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
```
Perhatikan bahwa nilainya sebenarnya adalah string, di mana string adalah representasi yang dikodekan base64 dari data biner. AWS AppSync mendekode string ini kembali ke nilai binernya sebelum mengirimnya ke DynamoDB. AWS AppSync menggunakan skema decoding base64 seperti yang didefinisikan oleh RFC 2045: karakter apa pun yang tidak ada dalam alfabet base64 diabaikan.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" }
}
```

**Jenis set biner `BS` **  
Satu set nilai biner. Nilai DynamoDB Binary Set dilambangkan dengan:  

```
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
```
Perhatikan bahwa nilainya sebenarnya adalah string, di mana string adalah representasi yang dikodekan base64 dari data biner. AWS AppSync mendekode string ini kembali ke nilai binernya sebelum mengirimnya ke DynamoDB. AWS AppSync menggunakan skema decoding base64 seperti yang didefinisikan oleh RFC 2045: karakter apa pun yang tidak ada dalam alfabet base64 diabaikan.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] }
}
```

**Jenis Boolean `BOOL` **  
Nilai Boolean. Nilai DynamoDB Boolean dilambangkan dengan:  

```
{ "BOOL" : true }
```
Perhatikan bahwa hanya `true` dan `false` merupakan nilai yang valid.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "orderComplete" : { "BOOL" : false }
}
```

**Jenis daftar `L` **  
Daftar nilai DynamoDB lain yang didukung. Nilai Daftar DynamoDB dilambangkan dengan:  

```
{ "L" : [ ... ] }
```
Perhatikan bahwa nilainya adalah nilai gabungan, di mana daftar dapat berisi nol atau lebih dari nilai DynamoDB yang didukung (termasuk daftar lainnya). Daftar ini juga dapat berisi campuran dari berbagai jenis.  
Contoh penggunaan adalah:  

```
{ "L" : [
      { "S"  : "A string value" },
      { "N"  : 1 },
      { "SS" : [ "Another string value", "Even more string values!" ] }
   ]
}
```

**Jenis peta `M` **  
Mewakili kumpulan pasangan kunci-nilai yang tidak berurutan dari nilai DynamoDB lain yang didukung. Nilai DynamoDB Map dilambangkan dengan:  

```
{ "M" : { ... } }
```
Perhatikan bahwa peta dapat berisi nol atau lebih pasangan nilai kunci. Kuncinya harus berupa string, dan nilainya dapat berupa nilai DynamoDB yang didukung (termasuk peta lainnya). Peta juga dapat berisi campuran dari berbagai jenis.  
Contoh penggunaan adalah:  

```
{ "M" : {
      "someString" : { "S"  : "A string value" },
      "someNumber" : { "N"  : 1 },
      "stringSet"  : { "SS" : [ "Another string value", "Even more string values!" ] }
   }
}
```

**Jenis nol `NULL` **  
Nilai nol. Nilai DynamoDB Null dilambangkan dengan:  

```
{ "NULL" : null }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "phoneNumbers" : { "NULL" : null }
}
```

Untuk informasi selengkapnya tentang setiap jenis, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html).

# Jenis sistem (pemetaan respons)
<a name="js-aws-appsync-resolver-reference-dynamodb-typed-values-responses"></a>

Saat menerima respons dari DynamoDB AWS AppSync , secara otomatis mengubahnya menjadi tipe primitif GraphQL dan JSON. Setiap atribut di DynamoDB diterjemahkan dan dikembalikan dalam konteks penangan respons.

Misalnya, jika DynamoDB mengembalikan berikut ini:

```
{
    "id" : { "S" : "1234" },
    "name" : { "S" : "Nadia" },
    "age" : { "N" : 25 }
}
```

Saat hasilnya dikembalikan dari resolver pipeline Anda, AWS AppSync ubah menjadi tipe GraphQL dan JSON sebagai:

```
{
    "id" : "1234",
    "name" : "Nadia",
    "age" : 25
}
```

Bagian ini menjelaskan cara AWS AppSync mengonversi skalar DynamoDB berikut, dokumen, dan jenis set:

**Jenis string `S` **  
Nilai string tunggal. Nilai DynamoDB String dikembalikan sebagai string.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB String berikut:  

```
{ "S" : "some string" }
```
AWS AppSync mengubahnya menjadi string:  

```
"some string"
```

**Jenis set string `SS` **  
Satu set nilai string. Nilai DynamoDB String Set dikembalikan sebagai daftar string.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB String Set berikut:  

```
{ "SS" : [ "first value", "second value", ... ] }
```
AWS AppSync mengubahnya menjadi daftar string:  

```
[ "+1 555 123 4567", "+1 555 234 5678" ]
```

**Jenis nomor `N` **  
Nilai numerik tunggal. Nilai DynamoDB Number dikembalikan sebagai angka.  
Misalnya, jika DynamoDB mengembalikan nilai Nomor DynamoDB berikut:  

```
{ "N" : 1234 }
```
AWS AppSync mengubahnya menjadi angka:  

```
1234
```

**Jenis set nomor `NS` **  
Satu set nilai angka. Nilai DynamoDB Number Set dikembalikan sebagai daftar angka.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Number Set berikut:  

```
{ "NS" : [ 67.8, 12.2, 70 ] }
```
AWS AppSync mengubahnya menjadi daftar angka:  

```
[ 67.8, 12.2, 70 ]
```

**Tipe biner `B` **  
Nilai biner. Nilai DynamoDB Binary dikembalikan sebagai string yang berisi representasi base64 dari nilai tersebut.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Binary berikut:  

```
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
```
AWS AppSync mengubahnya menjadi string yang berisi representasi base64 dari nilai:  

```
"SGVsbG8sIFdvcmxkIQo="
```
[Perhatikan bahwa data biner dikodekan dalam skema pengkodean base64 seperti yang ditentukan dalam [RFC 4648 dan RFC 2045](https://tools.ietf.org/html/rfc4648).](https://tools.ietf.org/html/rfc2045)

**Jenis set biner `BS` **  
Satu set nilai biner. Nilai DynamoDB Binary Set dikembalikan sebagai daftar string yang berisi representasi nilai base64.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Binary Set berikut:  

```
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
```
AWS AppSync mengubahnya menjadi daftar string yang berisi representasi nilai base64:  

```
[ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ]
```
[Perhatikan bahwa data biner dikodekan dalam skema pengkodean base64 seperti yang ditentukan dalam [RFC 4648 dan RFC 2045](https://tools.ietf.org/html/rfc4648).](https://tools.ietf.org/html/rfc2045)

**Jenis Boolean `BOOL` **  
Nilai Boolean. Nilai DynamoDB Boolean dikembalikan sebagai Boolean.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Boolean berikut:  

```
{ "BOOL" : true }
```
AWS AppSync mengubahnya menjadi Boolean:  

```
true
```

**Jenis daftar `L` **  
Daftar nilai DynamoDB lain yang didukung. Nilai Daftar DynamoDB dikembalikan sebagai daftar nilai, di mana setiap nilai batin juga dikonversi.  
Misalnya, jika DynamoDB mengembalikan nilai Daftar DynamoDB berikut:  

```
{ "L" : [
      { "S"  : "A string value" },
      { "N"  : 1 },
      { "SS" : [ "Another string value", "Even more string values!" ] }
   ]
}
```
AWS AppSync mengubahnya menjadi daftar nilai yang dikonversi:  

```
[ "A string value", 1, [ "Another string value", "Even more string values!" ] ]
```

**Jenis peta `M` **  
 key/value Kumpulan nilai DynamoDB lain yang didukung. Nilai DynamoDB Map dikembalikan sebagai objek JSON, di mana key/value masing-masing juga dikonversi.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Map berikut:  

```
{ "M" : {
      "someString" : { "S"  : "A string value" },
      "someNumber" : { "N"  : 1 },
      "stringSet"  : { "SS" : [ "Another string value", "Even more string values!" ] }
   }
}
```
AWS AppSync mengubahnya menjadi objek JSON:  

```
{
   "someString" : "A string value",
   "someNumber" : 1,
   "stringSet"  : [ "Another string value", "Even more string values!" ]
}
```

**Jenis nol `NULL` **  
Nilai nol.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Null berikut:  

```
{ "NULL" : null }
```
AWS AppSync mengubahnya menjadi null:  

```
null
```

# Penyaring
<a name="js-aws-appsync-resolver-reference-dynamodb-filter"></a>

Saat menanyakan objek di DynamoDB menggunakan `Query` operasi `Scan` dan, Anda dapat secara opsional menentukan `filter` a yang mengevaluasi hasil dan hanya mengembalikan nilai yang diinginkan.

Properti filter dari `Scan` permintaan `Query` atau memiliki struktur berikut:

```
type DynamoDBExpression = {
  expression: string;
  expressionNames?: { [key: string]: string};
  expressionValues?: { [key: string]: any};
};
```

Bidang didefinisikan sebagai berikut:

** `expression` **  
Ekspresi kueri. Untuk informasi selengkapnya tentang cara menulis ekspresi filter, lihat dokumentasi [DynamoDB [dan QueryFilter ScanFilter](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ScanFilter.html) DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.QueryFilter.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci tersebut sesuai dengan placeholder nama yang digunakan dalam file. `expression` Nilai harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`

** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

## Contoh
<a name="js-id18"></a>

Contoh berikut adalah bagian filter untuk permintaan, di mana entri diambil dari DynamoDB hanya dikembalikan jika judul dimulai dengan argumen. `title` 

Di sini kita menggunakan `util.transform.toDynamoDBFilterExpression` untuk secara otomatis membuat filter dari objek:

```
const filter = util.transform.toDynamoDBFilterExpression({
  title: { beginsWith: 'far away' },
});

const request = {};
request.filter = JSON.parse(filter);
```

Ini menghasilkan filter berikut:

```
{
  "filter": {
    "expression": "(begins_with(#title,:title_beginsWith))",
    "expressionNames": { "#title": "title" },
    "expressionValues": {
      ":title_beginsWith": { "S": "far away" }
    }
  }
}
```

# Ekspresi kondisi
<a name="js-aws-appsync-resolver-reference-dynamodb-condition-expressions"></a>

Saat Anda mengubah objek di DynamoDB dengan menggunakan operasi`PutItem`,`UpdateItem`, dan `DeleteItem` DynamoDB, Anda dapat secara opsional menentukan ekspresi kondisi yang mengontrol apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB sebelum operasi dilakukan.

Fungsi AWS AppSync DynamoDB memungkinkan ekspresi kondisi yang akan ditentukan `PutItem` dalam`UpdateItem`,, `DeleteItem` dan meminta objek, dan juga strategi untuk mengikuti jika kondisi gagal dan objek tidak diperbarui.

## Contoh 1
<a name="js-id19"></a>

Objek `PutItem` permintaan berikut tidak memiliki ekspresi kondisi. Akibatnya, ia menempatkan item di DynamoDB bahkan jika item dengan kunci yang sama sudah ada, sehingga menimpa item yang ada.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, ...values} = ctx.args
  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({foo, bar}),
    attributeValues: util.dynamodb.toMapValues(values),
  };
}
```

## Contoh 2
<a name="js-id20"></a>

`PutItem`Objek berikut memang memiliki ekspresi kondisi yang memungkinkan operasi berhasil hanya jika item dengan kunci yang sama *tidak* ada di DynamoDB.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { foo, bar, ...values} = ctx.args
  return {
    operation: 'PutItem',
    key: util.dynamodb.toMapValues({foo, bar}),
    attributeValues: util.dynamodb.toMapValues(values),
    condition: { expression: "attribute_not_exists(id)" }
  };
}
```

Secara default, jika pemeriksaan kondisi gagal, fungsi AWS AppSync DynamoDB memberikan kesalahan untuk mutasi.

Namun, fungsi AWS AppSync DynamoDB menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika fungsi AWS AppSync DynamoDB dapat menentukan bahwa nilai saat ini di DynamoDB cocok dengan hasil yang diinginkan, ia memperlakukan operasi seolah-olah berhasil pula.
+ Alih-alih mengembalikan kesalahan, Anda dapat mengonfigurasi fungsi untuk memanggil fungsi Lambda khusus untuk memutuskan bagaimana fungsi AWS AppSync DynamoDB harus menangani kegagalan.

Ini dijelaskan secara lebih rinci di bagian [Menangani kegagalan pemeriksaan kondisi](#condition-check).

[Untuk informasi selengkapnya tentang ekspresi kondisi DynamoDB, lihat dokumentasi DynamoDB. ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)

## Menentukan suatu kondisi
<a name="js-aws-appsync-resolver-reference-dynamodb-condition-specification"></a>

Objek `PutItem``UpdateItem`,, dan `DeleteItem` permintaan semuanya memungkinkan `condition` bagian opsional untuk ditentukan. Jika dihilangkan, tidak ada pemeriksaan kondisi yang dilakukan. Jika ditentukan, kondisi harus benar agar operasi berhasil.

`condition`Bagian memiliki struktur sebagai berikut:

```
type ConditionCheckExpression = {
  expression: string;
  expressionNames?: { [key: string]: string};
  expressionValues?: { [key: string]: any};
  equalsIgnore?: string[];
  consistentRead?: boolean;
  conditionalCheckFailedHandler?: {
    strategy: 'Custom' | 'Reject';
    lambdaArn?: string;
  };
};
```

Bidang berikut menentukan kondisi:

** `expression` **  
Ekspresi pembaruan itu sendiri. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi, lihat dokumentasi [DynamoDB ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder nama atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam *ekspresi*, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. *Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam ekspresi.*

** `expressionValues` **  
Substitusi untuk placeholder nilai atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam ekspresi, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam ekspresi.

Bidang yang tersisa memberi tahu fungsi AWS AppSync DynamoDB bagaimana menangani kegagalan pemeriksaan kondisi:

** `equalsIgnore` **  
Ketika pemeriksaan kondisi gagal saat menggunakan `PutItem` operasi, fungsi AWS AppSync DynamoDB membandingkan item yang saat ini ada di DynamoDB terhadap item yang coba ditulisnya. Jika mereka sama, itu memperlakukan operasi seolah-olah berhasil. Anda dapat menggunakan `equalsIgnore` bidang untuk menentukan daftar atribut yang AWS AppSync harus diabaikan saat melakukan perbandingan tersebut. Misalnya, jika satu-satunya perbedaan adalah `version` atribut, ia memperlakukan operasi seolah-olah berhasil. Bidang ini bersifat opsional.

** `consistentRead` **  
Ketika pemeriksaan kondisi gagal, AWS AppSync dapatkan nilai item saat ini dari DynamoDB menggunakan pembacaan yang sangat konsisten. Anda dapat menggunakan bidang ini untuk memberi tahu fungsi AWS AppSync DynamoDB agar menggunakan pembacaan yang konsisten pada akhirnya. Bidang ini opsional, dan defaultnya. `true`

** `conditionalCheckFailedHandler` **  
Bagian ini memungkinkan Anda untuk menentukan bagaimana fungsi AWS AppSync DynamoDB memperlakukan kegagalan pemeriksaan kondisi setelah membandingkan nilai saat ini di DynamoDB terhadap hasil yang diharapkan. Bagian ini opsional. Jika dihilangkan, itu default ke strategi. `Reject`    
** `strategy` **  
Strategi yang diambil oleh fungsi AWS AppSync DynamoDB setelah membandingkan nilai saat ini di DynamoDB dengan hasil yang diharapkan. Bidang ini diperlukan dan memiliki nilai yang mungkin berikut:    
** `Reject` **  
Mutasi gagal, dan kesalahan ditambahkan ke respons GraphQL.  
** `Custom` **  
Fungsi AWS AppSync DynamoDB memanggil fungsi Lambda kustom untuk memutuskan bagaimana menangani kegagalan pemeriksaan kondisi. Ketika `strategy` diatur ke`Custom`, `lambdaArn` bidang harus berisi ARN dari fungsi Lambda untuk dipanggil.  
** `lambdaArn` **  
ARN dari fungsi Lambda untuk memanggil yang menentukan bagaimana fungsi DynamoDB harus menangani kegagalan pemeriksaan AWS AppSync kondisi. Bidang ini hanya harus ditentukan ketika `strategy` diatur ke`Custom`. Untuk informasi selengkapnya tentang cara menggunakan fitur ini, lihat [Menangani kegagalan pemeriksaan kondisi](#condition-check).

## Menangani kegagalan pemeriksaan kondisi
<a name="js-aws-appsync-resolver-reference-dynamodb-condition-handling"></a>

Ketika pemeriksaan kondisi gagal, fungsi AWS AppSync DynamoDB dapat meneruskan kesalahan untuk mutasi dan nilai objek saat ini dengan menggunakan utilitas. `util.appendError` Namun, fungsi AWS AppSync DynamoDB menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika fungsi AWS AppSync DynamoDB dapat menentukan bahwa nilai saat ini di DynamoDB cocok dengan hasil yang diinginkan, ia memperlakukan operasi seolah-olah berhasil pula.
+ Alih-alih mengembalikan kesalahan, Anda dapat mengonfigurasi fungsi untuk memanggil fungsi Lambda khusus untuk memutuskan bagaimana fungsi AWS AppSync DynamoDB harus menangani kegagalan.

Diagram alur untuk proses ini adalah:

![\[Flowchart showing process for transforming requests with mutation attempts and value checks.\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/images/DynamoDB-condition-check-failure-handling.png)


### Memeriksa hasil yang diinginkan
<a name="js-checking-for-the-desired-result"></a>

Ketika pemeriksaan kondisi gagal, fungsi AWS AppSync DynamoDB melakukan permintaan DynamoDB untuk mendapatkan `GetItem` nilai item saat ini dari DynamoDB. Secara default, ini menggunakan pembacaan yang sangat konsisten, namun ini dapat dikonfigurasi menggunakan `consistentRead` bidang di `condition` blok dan membandingkannya dengan hasil yang diharapkan:
+ Untuk `PutItem` operasi, fungsi AWS AppSync DynamoDB membandingkan nilai saat ini terhadap nilai yang mencoba untuk menulis, tidak termasuk atribut yang tercantum dalam dari perbandingan. `equalsIgnore` Jika itemnya sama, ia memperlakukan operasi sebagai berhasil dan mengembalikan item yang diambil dari DynamoDB. Jika tidak, ia mengikuti strategi yang dikonfigurasi.

  Misalnya, jika objek `PutItem` permintaan terlihat seperti berikut:

  ```
  import { util } from '@aws-appsync/utils';
  export function request(ctx) {
    const { id, name, version} = ctx.args
    return {
      operation: 'PutItem',
      key: util.dynamodb.toMapValues({foo, bar}),
      attributeValues: util.dynamodb.toMapValues({ name, version: version+1 }),
      condition: { 
        expression: "version = :expectedVersion",
        expressionValues: util.dynamodb.toMapValues({':expectedVersion': version}),
        equalsIgnore: ['version']
      }
    };
  }
  ```

  Dan item yang saat ini ada di DynamoDB terlihat seperti berikut:

  ```
  {
     "id" : { "S" : "1" },
     "name" : { "S" : "Steve" },
     "version" : { "N" : 8 }
  }
  ```

  Fungsi AWS AppSync DynamoDB akan membandingkan item yang coba ditulisnya dengan nilai saat ini, melihat bahwa satu-satunya perbedaan adalah `version` bidang, tetapi karena dikonfigurasi untuk mengabaikan `version` bidang, ia memperlakukan operasi sebagai berhasil dan mengembalikan item yang diambil dari DynamoDB.
+ Untuk `DeleteItem` operasi, fungsi AWS AppSync DynamoDB memeriksa untuk memverifikasi bahwa item dikembalikan dari DynamoDB. Jika tidak ada barang yang dikembalikan, itu memperlakukan operasi sebagai berhasil. Jika tidak, ia mengikuti strategi yang dikonfigurasi.
+ Untuk `UpdateItem` operasi, fungsi AWS AppSync DynamoDB tidak memiliki informasi yang cukup untuk menentukan apakah item saat ini di DynamoDB cocok dengan hasil yang diharapkan, dan oleh karena itu mengikuti strategi yang dikonfigurasi.

Jika status objek saat ini di DynamoDB berbeda dari hasil yang diharapkan, fungsi AWS AppSync DynamoDB mengikuti strategi yang dikonfigurasi, untuk menolak mutasi atau memanggil fungsi Lambda untuk menentukan apa yang harus dilakukan selanjutnya.

### Mengikuti strategi “tolak”
<a name="js-following-the-reject-strategy"></a>

Saat mengikuti `Reject` strategi, fungsi AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi.

Misalnya, mengingat permintaan mutasi berikut:

```
mutation {
    updatePerson(id: 1, name: "Steve", expectedVersion: 1) {
        Name
        theVersion
    }
}
```

Jika item yang dikembalikan dari DynamoDB terlihat seperti berikut:

```
{
   "id" : { "S" : "1" },
   "name" : { "S" : "Steve" },
   "version" : { "N" : 8 }
}
```

Dan fungsi respon handler terlihat seperti berikut:

```
import { util } from '@aws-appsync/utils';
export function response(ctx) {
  const { version, ...values } = ctx.result;
  const result = { ...values, theVersion: version };
  if (ctx.error) {
    if (error) {
      return util.appendError(error.message, error.type, result, null);
    }
  }
  return result
}
```

Respons GraphQL terlihat seperti berikut:

```
{
  "data": null,
  "errors": [
    {
      "message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ)"
      "errorType": "DynamoDB:ConditionalCheckFailedException",
      ...
    }
  ]
}
```

Juga, jika ada bidang dalam objek yang dikembalikan diisi oleh resolver lain dan mutasi telah berhasil, mereka tidak akan diselesaikan ketika objek dikembalikan di bagian. `error`

### Mengikuti strategi “kustom”
<a name="js-following-the-custom-strategy"></a>

Saat mengikuti `Custom` strategi, fungsi AWS AppSync DynamoDB memanggil fungsi Lambda untuk memutuskan apa yang harus dilakukan selanjutnya. Fungsi Lambda memilih salah satu opsi berikut:
+  `reject`mutasi. Ini memberi tahu fungsi AWS AppSync DynamoDB untuk berperilaku seolah-olah strategi yang dikonfigurasi `Reject` adalah, mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB seperti yang dijelaskan di bagian sebelumnya.
+  `discard`mutasi. Ini memberitahu fungsi AWS AppSync DynamoDB untuk diam-diam mengabaikan kegagalan pemeriksaan kondisi dan mengembalikan nilai dalam DynamoDB.
+  `retry`mutasi. Ini memberitahu fungsi AWS AppSync DynamoDB untuk mencoba lagi mutasi dengan objek permintaan baru.

 **Permintaan doa Lambda**

Fungsi AWS AppSync DynamoDB memanggil fungsi Lambda yang ditentukan dalam. `lambdaArn` Ini menggunakan `service-role-arn` konfigurasi yang sama pada sumber data. Muatan doa memiliki struktur berikut:

```
{
    "arguments": { ... },
    "requestMapping": {... },
    "currentValue": { ... },
    "resolver": { ... },
    "identity": { ... }
}
```

Bidang didefinisikan sebagai berikut:

** `arguments` **  
Argumen dari mutasi GraphQL. Ini sama dengan argumen yang tersedia untuk objek permintaan di`context.arguments`.

** `requestMapping` **  
Objek permintaan untuk operasi ini.

** `currentValue` **  
Nilai objek saat ini di DynamoDB.

** `resolver` **  
Informasi tentang AWS AppSync resolver atau fungsi.

** `identity` **  
Informasi tentang penelepon. Ini sama dengan informasi identitas yang tersedia untuk objek permintaan di`context.identity`.

Contoh lengkap dari payload:

```
{
    "arguments": {
        "id": "1",
        "name": "Steve",
        "expectedVersion": 1
    },
    "requestMapping": {
        "version" : "2017-02-28",
        "operation" : "PutItem",
        "key" : {
           "id" : { "S" : "1" }
        },
        "attributeValues" : {
           "name" : { "S" : "Steve" },
           "version" : { "N" : 2 }
        },
        "condition" : {
           "expression" : "version = :expectedVersion",
           "expressionValues" : {
               ":expectedVersion" : { "N" : 1 }
           },
           "equalsIgnore": [ "version" ]
        }
    },
    "currentValue": {
        "id" : { "S" : "1" },
        "name" : { "S" : "Steve" },
        "version" : { "N" : 8 }
    },
    "resolver": {
        "tableName": "People",
        "awsRegion": "us-west-2",
        "parentType": "Mutation",
        "field": "updatePerson",
        "outputType": "Person"
    },
    "identity": {
        "accountId": "123456789012",
        "sourceIp": "x.x.x.x",
        "user": "AIDAAAAAAAAAAAAAAAAAA",
        "userArn": "arn:aws:iam::123456789012:user/appsync"
    }
}
```

 **Tanggapan Doa Lambda** 

Fungsi Lambda dapat memeriksa payload pemanggilan dan menerapkan logika bisnis apa pun untuk memutuskan bagaimana fungsi AWS AppSync DynamoDB harus menangani kegagalan. Ada tiga opsi untuk menangani kegagalan pemeriksaan kondisi:
+  `reject`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "reject"
  }
  ```

  Ini memberi tahu fungsi AWS AppSync DynamoDB untuk berperilaku seolah-olah strategi yang dikonfigurasi `Reject` adalah, mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB, seperti yang dijelaskan pada bagian di atas.
+  `discard`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "discard"
  }
  ```

  Ini memberitahu fungsi AWS AppSync DynamoDB untuk diam-diam mengabaikan kegagalan pemeriksaan kondisi dan mengembalikan nilai dalam DynamoDB.
+  `retry`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "retry",
      "retryMapping": { ... }
  }
  ```

  Ini memberitahu fungsi AWS AppSync DynamoDB untuk mencoba lagi mutasi dengan objek permintaan baru. Struktur `retryMapping` bagian tergantung pada operasi DynamoDB, dan merupakan bagian dari objek permintaan penuh untuk operasi itu.

  Untuk`PutItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `attributeValues` lapangan, lihat [PutItem](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-putitem).

  ```
  {
      "attributeValues": { ... },
      "condition": {
          "equalsIgnore" = [ ... ],
          "consistentRead" = true
      }
  }
  ```

  Untuk`UpdateItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `update` bagian ini, lihat [UpdateItem](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem).

  ```
  {
      "update" : {
          "expression" : "someExpression"
          "expressionNames" : {
              "#foo" : "foo"
          },
          "expressionValues" : {
              ":bar" : ... typed value
          }
      },
      "condition": {
          "consistentRead" = true
      }
  }
  ```

  Untuk`DeleteItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut.

  ```
  {
      "condition": {
          "consistentRead" = true
      }
  }
  ```

  Tidak ada cara untuk menentukan operasi atau kunci yang berbeda untuk dikerjakan. Fungsi AWS AppSync DynamoDB hanya memungkinkan percobaan ulang dari operasi yang sama pada objek yang sama. Juga, `condition` bagian ini tidak mengizinkan a `conditionalCheckFailedHandler` untuk ditentukan. Jika percobaan ulang gagal, fungsi AWS AppSync DynamoDB mengikuti strategi. `Reject`

Berikut adalah contoh fungsi Lambda untuk menangani permintaan yang gagal`PutItem`. Logika bisnis melihat siapa yang membuat panggilan. Jika dibuat oleh`jeffTheAdmin`, ia mencoba ulang permintaan, memperbarui `version` dan `expectedVersion` dari item yang saat ini ada di DynamoDB. Jika tidak, ia menolak mutasi.

```
exports.handler = (event, context, callback) => {
    console.log("Event: "+ JSON.stringify(event));

    // Business logic goes here.

    var response;
    if ( event.identity.user == "jeffTheAdmin" ) {
        response = {
            "action" : "retry",
            "retryMapping" : {
                "attributeValues" : event.requestMapping.attributeValues,
                "condition" : {
                    "expression" : event.requestMapping.condition.expression,
                    "expressionValues" : event.requestMapping.condition.expressionValues
                }
            }
        }
        response.retryMapping.attributeValues.version = { "N" : event.currentValue.version.N + 1 }
        response.retryMapping.condition.expressionValues[':expectedVersion'] = event.currentValue.version

    } else {
        response = { "action" : "reject" }
    }

    console.log("Response: "+ JSON.stringify(response))
    callback(null, response)
};
```

# Ekspresi kondisi transaksi
<a name="js-aws-appsync-resolver-reference-dynamodb-transaction-condition-expressions"></a>

Ekspresi kondisi transaksi tersedia dalam permintaan dari keempat jenis operasi di`TransactWriteItems`, yaitu,`PutItem`,`DeleteItem`,`UpdateItem`, dan`ConditionCheck`.

Untuk`PutItem`,`DeleteItem`, dan`UpdateItem`, ekspresi kondisi transaksi adalah opsional. Untuk`ConditionCheck`, ekspresi kondisi transaksi diperlukan.

## Contoh 1
<a name="js-id22"></a>

Handler permintaan `DeleteItem` fungsi transaksional berikut tidak memiliki ekspresi kondisi. Akibatnya, ia menghapus item di DynamoDB.

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { postId } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'DeleteItem',
        key: util.dynamodb.toMapValues({ postId }),
      }
    ],
  };
}
```

## Contoh 2
<a name="js-id23"></a>

Handler permintaan `DeleteItem` fungsi transaksional berikut memang memiliki ekspresi kondisi transaksi yang memungkinkan operasi berhasil hanya jika penulis posting itu sama dengan nama tertentu.

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { postId, authorName} = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: 'posts',
        operation: 'DeleteItem',
        key: util.dynamodb.toMapValues({ postId }),
        condition: util.transform.toDynamoDBConditionExpression({
          authorName: { eq: authorName },
        }),
      }
    ],
  };
}
```

Jika pemeriksaan kondisi gagal, itu akan menyebabkan `TransactionCanceledException` dan detail kesalahan akan dikembalikan`ctx.result.cancellationReasons`. Perhatikan bahwa secara default, item lama di DynamoDB yang membuat pemeriksaan kondisi gagal akan dikembalikan. `ctx.result.cancellationReasons`

## Menentukan suatu kondisi
<a name="js-id24"></a>

Objek `PutItem``UpdateItem`,, dan `DeleteItem` permintaan semuanya memungkinkan `condition` bagian opsional untuk ditentukan. Jika dihilangkan, tidak ada pemeriksaan kondisi yang dilakukan. Jika ditentukan, kondisi harus benar agar operasi berhasil. `ConditionCheck`Harus memiliki `condition` bagian yang akan ditentukan. Syaratnya harus benar agar seluruh transaksi berhasil.

`condition`Bagian memiliki struktur sebagai berikut:

```
type TransactConditionCheckExpression = {
  expression: string;
  expressionNames?: { [key: string]: string };
  expressionValues?: { [key: string]: string };
  returnValuesOnConditionCheckFailure: boolean;
};
```

Bidang berikut menentukan kondisi:

** `expression` **  
Ekspresi pembaruan itu sendiri. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi, lihat dokumentasi [DynamoDB ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder nama atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam *ekspresi*, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. *Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam ekspresi.*

** `expressionValues` **  
Substitusi untuk placeholder nilai atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam ekspresi, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam ekspresi.

** `returnValuesOnConditionCheckFailure` **  
Tentukan apakah akan mengambil item di DynamoDB kembali ketika pemeriksaan kondisi gagal. Item yang diambil akan masuk`ctx.result.cancellationReasons[<index>].item`, di `<index>` mana indeks item permintaan yang gagal dalam pemeriksaan kondisi. Nilai ini default ke true.

# Proyeksi
<a name="js-aws-appsync-resolver-reference-dynamodb-projections"></a>

Saat membaca objek di DynamoDB menggunakan `GetItem``Scan`,,,`Query`, `TransactGetItems` dan operasi`BatchGetItem`, Anda dapat secara opsional menentukan proyeksi yang mengidentifikasi atribut yang Anda inginkan. Properti proyeksi memiliki struktur berikut, yang mirip dengan filter: 

```
type DynamoDBExpression = {
  expression: string;
  expressionNames?: { [key: string]: string}
};
```

Bidang didefinisikan sebagai berikut:

** `expression` **  
Ekspresi proyeksi, yang merupakan string. Untuk mengambil atribut tunggal, tentukan namanya. Untuk beberapa atribut, nama harus berupa nilai yang dipisahkan koma. Untuk informasi selengkapnya tentang penulisan ekspresi proyeksi, lihat dokumentasi ekspresi proyeksi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html). Bidang ini wajib diisi. 

** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi dalam bentuk pasangan kunci-nilai. Kunci tersebut sesuai dengan placeholder nama yang digunakan dalam file. `expression` Nilai harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini opsional dan hanya boleh diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression` Untuk informasi selengkapnya`expressionNames`, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html). 

## Contoh 1
<a name="js-id22"></a>

Contoh berikut adalah bagian proyeksi untuk JavaScript fungsi di mana hanya atribut `author` dan `id` dikembalikan dari DynamoDB:

```
projection : {
    expression : "#author, id",
    expressionNames : {
        "#author" : "author"
    }
}
```

**Tip**  
Anda dapat mengakses set pemilihan permintaan GraphQL Anda menggunakan. [selectionSetList](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference-js.html#aws-appsync-resolver-context-reference-info-js) Bidang ini memungkinkan Anda untuk membingkai ekspresi proyeksi Anda secara dinamis sesuai dengan kebutuhan Anda.

**catatan**  
Saat menggunakan ekspresi proyeksi dengan `Scan` operasi `Query` dan, nilai untuk `select` harus`SPECIFIC_ATTRIBUTES`. Untuk informasi selengkapnya, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-Select).