

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

# AWS AppSync referensi template pemetaan resolver untuk DynamoDB
<a name="resolver-mapping-template-reference-dynamodb"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-reference-dynamodb-filter.html) - Pelajari lebih lanjut tentang filter untuk operasi kueri dan pemindaian.
+  [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-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/aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.html) - Pelajari lebih lanjut tentang ekspresi kondisi untuk TransactWriteItems operasi.
+  [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-projections.html) - Pelajari lebih lanjut tentang cara menentukan atribut dalam operasi baca.

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

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

Dokumen `GetItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "GetItem",
    "key" : {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "consistentRead" : true,
    "projection" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

 **`consistentRead`**   
Apakah akan melakukan pembacaan yang sangat konsisten dengan DynamoDB atau tidak. 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/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

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

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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

Contoh berikut adalah template pemetaan untuk query GraphQL: `getThing(foo: String!, bar: String!)`

```
{
    "version" : "2017-02-28",
    "operation" : "GetItem",
    "key" : {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.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="aws-appsync-resolver-mapping-template-reference-dynamodb-putitem"></a>

Dokumen pemetaan `PutItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver 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

Dokumen `PutItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

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

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

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

 **`attributeValues`**   
Sisa atribut item yang akan dimasukkan ke dalam DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). 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 diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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

Contoh berikut adalah template pemetaan 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.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version)
    }
}
```

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

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

Contoh ini memeriksa untuk memastikan item yang saat ini di DynamoDB memiliki bidang yang disetel `version` ke. `expectedVersion`

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        #set( $newVersion = $context.arguments.expectedVersion + 1 )
        "version" : $util.dynamodb.toDynamoDBJson($newVersion)
    },
    "condition" : {
        "expression" : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

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="aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem"></a>

Dokumen pemetaan `UpdateItem` permintaan memungkinkan Anda untuk memberitahu AWS AppSync DynamoDB resolver 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

Dokumen `UpdateItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "UpdateItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "update" : {
        "expression" : "someExpression",
        "expressionNames" : {
           "#foo" : "foo"
       },
       "expressionValues" : {
           ":bar" : ... typed value
       }
    },
    "condition" : {
        ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

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

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

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). 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 konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `upvote(id: ID!)`

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

```
{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },
    "update" : {
        "expression" : "ADD #votefield :plusOne, version :plusOne",
        "expressionNames" : {
            "#votefield" : "upvotes"
        },
        "expressionValues" : {
            ":plusOne" : { "N" : 1 }
        }
    }
}
```

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

Contoh berikut adalah template pemetaan 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`

```
{
    "version" : "2017-02-28",

    "operation" : "UpdateItem",

    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },

    ## Set up some space to keep track of things we're updating **
    #set( $expNames  = {} )
    #set( $expValues = {} )
    #set( $expSet = {} )
    #set( $expAdd = {} )
    #set( $expRemove = [] )

    ## Increment "version" by 1 **
    $!{expAdd.put("version", ":newVersion")}
    $!{expValues.put(":newVersion", { "N" : 1 })}

    ## Iterate through each argument, skipping "id" and "expectedVersion" **
    #foreach( $entry in $context.arguments.entrySet() )
        #if( $entry.key != "id" && $entry.key != "expectedVersion" )
            #if( (!$entry.value) && ("$!{entry.value}" == "") )
                ## If the argument is set to "null", then remove that attribute from the item in DynamoDB **

                #set( $discard = ${expRemove.add("#${entry.key}")} )
                $!{expNames.put("#${entry.key}", "$entry.key")}
            #else
                ## Otherwise set (or update) the attribute on the item in DynamoDB **

                $!{expSet.put("#${entry.key}", ":${entry.key}")}
                $!{expNames.put("#${entry.key}", "$entry.key")}

                #if( $entry.key == "ups" || $entry.key == "downs" )
                    $!{expValues.put(":${entry.key}", { "N" : $entry.value })}
                #else
                    $!{expValues.put(":${entry.key}", { "S" : "${entry.value}" })}
                #end
            #end
        #end
    #end

    ## Start building the update expression, starting with attributes we're going to SET **
    #set( $expression = "" )
    #if( !${expSet.isEmpty()} )
        #set( $expression = "SET" )
        #foreach( $entry in $expSet.entrySet() )
            #set( $expression = "${expression} ${entry.key} = ${entry.value}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Continue building the update expression, adding attributes we're going to ADD **
    #if( !${expAdd.isEmpty()} )
        #set( $expression = "${expression} ADD" )
        #foreach( $entry in $expAdd.entrySet() )
            #set( $expression = "${expression} ${entry.key} ${entry.value}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Continue building the update expression, adding attributes we're going to REMOVE **
    #if( !${expRemove.isEmpty()} )
        #set( $expression = "${expression} REMOVE" )

        #foreach( $entry in $expRemove )
            #set( $expression = "${expression} ${entry}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Finally, write the update expression into the document, along with any expressionNames and expressionValues **
    "update" : {
        "expression" : "${expression}"
        #if( !${expNames.isEmpty()} )
            ,"expressionNames" : $utils.toJson($expNames)
        #end
        #if( !${expValues.isEmpty()} )
            ,"expressionValues" : $utils.toJson($expValues)
        #end
    },

    "condition" : {
        "expression"       : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($ctx.args.expectedVersion)
        }
    }
}
```

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="aws-appsync-resolver-mapping-template-reference-dynamodb-deleteitem"></a>

Dokumen pemetaan `DeleteItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `DeleteItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Kunci item di DynamoDB
+ Kondisi agar operasi berhasil

Dokumen `DeleteItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "DeleteItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "condition" : {
        ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). 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 konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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

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

```
{
    "version" : "2017-02-28",
    "operation" : "DeleteItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    }
}
```

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

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

```
{
    "version" : "2017-02-28",
    "operation" : "DeleteItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },
    "condition" : {
        "expression"       : "attribute_not_exists(id) OR version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

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="aws-appsync-resolver-mapping-template-reference-dynamodb-query"></a>

Dokumen pemetaan `Query` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `Query` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ 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)
+ Token pagination

Dokumen `Query` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        "expression" : "some expression",
        "expressionNames" : {
            "#foo" : "foo"
        },
        "expressionValues" : {
            ":bar" : ... typed value
        }
    },
    "index" : "fooIndex",
    "nextToken" : "a pagination token",
    "limit" : 10,
    "scanIndexForward" : true,
    "consistentRead" : false,
    "select" : "ALL_ATTRIBUTES" | "ALL_PROJECTED_ATTRIBUTES" | "SPECIFIC_ATTRIBUTES",
    "filter" : {
        ...
    },
    "projection" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). 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/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

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

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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 resolver.

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

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

Contoh berikut adalah template pemetaan 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.

```
{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        "expression" : "ownerId = :ownerId",
        "expressionValues" : {
            ":ownerId" : $util.dynamodb.toDynamoDBJson($context.arguments.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="aws-appsync-resolver-mapping-template-reference-dynamodb-scan"></a>

Dokumen pemetaan `Scan` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `Scan` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal 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

Dokumen `Scan` pemetaan memiliki struktur sebagai berikut:

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

Bidang didefinisikan sebagai berikut:

## Bidang pemindaian
<a name="scan-list"></a>

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

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `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](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). 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, AWS AppSync DynamoDB resolver 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/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-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 konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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 resolver.

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

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

Contoh berikut adalah template pemetaan untuk query GraphQL:. `allPosts`

Dalam contoh ini, semua entri dalam tabel dikembalikan.

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

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

Contoh berikut adalah template pemetaan untuk query GraphQL:. `postsMatching(title: String!)`

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

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

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="aws-appsync-resolver-mapping-template-reference-dynamodb-sync"></a>

Dokumen pemetaan `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

Dokumen `Sync` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "basePartitionKey": "Base Tables PartitionKey",
    "deltaIndexName": "delta-index-name",
    "limit" : 10,
    "nextToken" : "aPaginationToken",
    "lastSync" :  1550000000000,
    "filter" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. Hanya saat `2018-05-29` ini didukung. Nilai ini diperlukan.

** `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](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). 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 konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

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 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="id14"></a>

Contoh berikut adalah template pemetaan 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.

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "limit": 100,
    "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)),
    "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null))
}
```

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

Dokumen pemetaan `BatchGetItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `BatchGetItem` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk template 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.

Dokumen `BatchGetItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "table1": {
           "keys": [
              ## Item to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item2 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,            
            "projection" : {
                 ...
            }
        },
        "table2": {
           "keys": [
              ## Item3 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item4 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,
            "projection" : {
                 ...
            }
        }
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md).  
** `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/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-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 template pemetaan 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 template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchGetItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          }
        }
    ],
  }
}
```

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

```
{
   "data": {
     "authors": [null],
     "posts": [
        # Was retrieved
        {
          "author_id": "a1",
          "post_id": "p2",
          "post_title": "title",
          "post_description": "description",
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        # This item was not processed due to an error
        {
          "author_id": "a1"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap kunci tabel yang disediakan dalam template pemetaan permintaan 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**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

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

Dokumen pemetaan `BatchDeleteItem` permintaan memungkinkan Anda memberi tahu penyelesai AWS AppSync DynamoDB untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menghapus beberapa item, berpotensi di beberapa tabel. Untuk template 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.

Dokumen `BatchDeleteItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchDeleteItem",
    "tables" : {
        "table1": [
        ## Item to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item2 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
        "table2": [
        ## Item3 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item4 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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 template pemetaan 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 template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchDeleteItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          }
        }
    ],
  }
}
```

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

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

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap kunci tabel yang disediakan dalam template pemetaan permintaan 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**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

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

Dokumen pemetaan `BatchPutItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menempatkan beberapa item, berpotensi di beberapa tabel. Untuk template 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.

Dokumen `BatchPutItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "table1": [
        ## Item to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item2 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
        "table2": [
        ## Item3 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item4 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
    }
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `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 penyediaannya di dalam templat pemetaan 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 template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchPutItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          },
          "author_name": {
            "S": "a1_name"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          },
          "post_title": {
            "S": "title"
          }
        }
    ],
  }
}
```

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

```
{
   "data": {
     "authors": [
         null
     ],
     "posts": [
        # Was inserted
        {
          "author_id": "a1",
          "post_id": "p2",
          "post_title": "title"
        }
     ]
   },
   "unprocessedItems": {
     "authors": [
        # This item was not processed due to an error
        {
          "author_id": "a1",
          "author_name": "a1_name"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessEditems**, dan setiap kunci tabel yang disediakan dalam template pemetaan 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**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

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

Dokumen pemetaan `TransactGetItems` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `TransactGetItems` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk template 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.

Dokumen `TransactGetItems` pemetaan memiliki struktur sebagai berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactGetItems",
    "transactItems": [
       ## First request item
       {
           "table": "table1",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "projection" : {
                ...
           }
       },
       ## Second request item
       {
           "table": "table2",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "projection" : {
                ...
           }
       }
    ]
}
```

Bidang didefinisikan sebagai berikut:

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

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

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md).  
**`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/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-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 template pemetaan permintaan berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactGetItems",
    "transactItems": [
       ## First request item
       {
           "table": "posts",
           "key": {
               "post_id": {
                 "S": "p1"
               }
           }
       },
       ## Second request item
       {
           "table": "authors",
           "key": {
               "author_id": {
                 "S": a1
               }
           }
       }
    ]
}
```

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`

Untuk contoh yang lebih lengkap, ikuti tutorial Transaksi DynamoDB AppSync dengan [tutorial di sini: DynamoDB](tutorial-dynamodb-transact.md#aws-appsync-tutorial-dynamodb-transact) transaction resolvers.

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

Dokumen pemetaan `TransactWriteItems` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `TransactWriteItems` permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk template 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.

Dokumen `TransactWriteItems` pemetaan memiliki struktur sebagai berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactWriteItems",
    "transactItems": [
       {
           "table": "table1",
           "operation": "PutItem",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "attributeValues": {
               "baz": ... typed value
           },
           "condition": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table":"table2",
           "operation": "UpdateItem",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "update": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               }
           },
           "condition": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo":"foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table": "table3",
           "operation": "DeleteItem",
           "key":{
               "foo": ... typed value,
               "bar": ... typed value
           },
           "condition":{
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table": "table4",
           "operation": "ConditionCheck",
           "key":{
               "foo": ... typed value,
               "bar": ... typed value
           },
           "condition":{
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       }
    ]
}
```

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

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

**Bidang didefinisikan sebagai berikut:**    
** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.  
** `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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.  
** `attributeValues` **  
Sisa atribut item yang akan dimasukkan ke dalam DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). 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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). 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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). 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)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). 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](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). 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 template pemetaan permintaan berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactWriteItems",
    "transactItems": [
       {
           "table": "posts",
           "operation": "PutItem",
           "key": {
               "post_id": {
                   "S": "p1"
               }
           },
           "attributeValues": {
               "post_title": {
                   "S": "New title"
               },
               "post_description": {
                   "S": "New description"
               }
           },
           "condition": {
               "expression": "post_title = :post_title",
               "expressionValues": {
                   ":post_title": {
                       "S": "Expected old title"
                   }
               }
           }
       },
       {
           "table":"authors",
           "operation": "UpdateItem",
           "key": {
               "author_id": {
                   "S": "a1"
               },
           },
           "update": {
               "expression": "SET author_name = :author_name",
               "expressionValues": {
                   ":author_name": {
                       "S": "New name"
                   }
               }
           },
       }
    ]
}
```

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`

Untuk contoh yang lebih lengkap, ikuti tutorial Transaksi DynamoDB AppSync dengan [tutorial di sini: DynamoDB](tutorial-dynamodb-transact.md#aws-appsync-tutorial-dynamodb-transact) transaction resolvers.

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

Saat menggunakan AWS AppSync DynamoDB resolver untuk memanggil AWS AppSync tabel DynamoDB Anda, 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, dokumen pemetaan permintaan tidak diuraikan.

Nilai DynamoDB digunakan di mana saja dalam dokumen pemetaan 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 `id` bidang di bagian (mungkin dalam `key` `GetItem` dokumen pemetaan permintaan).

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

 **Jenis 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 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!" ] }
   }
}
```

**Tipe nol `NULL` **  
Sebuah 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="aws-appsync-resolver-mapping-template-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 pemetaan respons.

Misalnya, jika DynamoDB mengembalikan berikut:

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

Kemudian AWS AppSync DynamoDB resolver mengubahnya 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!" ]
}
```

**Tipe nol `NULL` **  
Sebuah nilai nol.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Null berikut:  

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

```
null
```

# Penyaring
<a name="aws-appsync-resolver-mapping-template-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.

Bagian pemetaan filter dari dokumen `Query` atau `Scan` pemetaan memiliki struktur berikut:

```
"filter" : {
    "expression" : "filter expression"
    "expressionNames" : {
        "#name" : "name",
    },
    "expressionValues" : {
        ":value" : ... typed value
    },
}
```

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 [Jenis Sistem (Permintaan Pemetaan](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)). 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="id18"></a>

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

```
"filter" : {
    "expression" : "begins_with(#title, :title)",
    "expressionNames" : {
        "#title" : "title"
    },
    "expressionValues" : {
        ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title)
    }
}
```

# Ekspresi kondisi
<a name="aws-appsync-resolver-mapping-template-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.

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

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

Dokumen `PutItem` pemetaan 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.

```
{
   "version" : "2017-02-28",
   "operation" : "PutItem",
   "key" : {
      "id" : { "S" : "1" }
   }
}
```

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

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

```
{
   "version" : "2017-02-28",
   "operation" : "PutItem",
   "key" : {
      "id" : { "S" : "1" }
   },
   "condition" : {
      "expression" : "attribute_not_exists(id)"
   }
}
```

Secara default, jika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi. Namun, AWS AppSync DynamoDB resolver menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika AWS AppSync DynamoDB resolver 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 resolver untuk menjalankan fungsi Lambda khusus untuk memutuskan bagaimana penyelesai DynamoDB AWS AppSync harus menangani kegagalan.

Ini dijelaskan secara lebih rinci di bagian [Penanganan Kegagalan Pemeriksaan Kondisi](#aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling).

[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="aws-appsync-resolver-mapping-template-reference-dynamodb-condition-specification"></a>

Dokumen pemetaan `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:

```
"condition" : {
    "expression" : "someExpression"
    "expressionNames" : {
        "#foo" : "foo"
    },
    "expressionValues" : {
        ":bar" : ... typed value
    },
    "equalsIgnore" : [ "version" ],
    "consistentRead" : true,
    "conditionalCheckFailedHandler" : {
        "strategy" : "Custom",
        "lambdaArn" : "arn:..."
    }
}
```

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 [Jenis Sistem (Permintaan Pemetaan](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)). 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 AWS AppSync DynamoDB resolver cara menangani kegagalan pemeriksaan kondisi:

** `equalsIgnore` **  
Ketika pemeriksaan kondisi gagal saat menggunakan `PutItem` operasi, penyelesai AWS AppSync DynamoDB membandingkan item yang saat ini ada di DynamoDB dengan 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 penyelesai AWS AppSync DynamoDB agar menggunakan pembacaan yang konsisten pada akhirnya. Bidang ini opsional, dan defaultnya. `true`

** `conditionalCheckFailedHandler` **  
Bagian ini memungkinkan Anda untuk menentukan bagaimana penyelesai AWS AppSync DynamoDB memperlakukan kegagalan pemeriksaan kondisi setelah membandingkan nilai saat ini di DynamoDB dengan hasil yang diharapkan. Bagian ini opsional. Jika dihilangkan, itu default ke strategi. `Reject`    
** `strategy` **  
Strategi yang diambil oleh AWS AppSync DynamoDB resolver 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` **  
Penyelesai DynamoDB memanggil fungsi Lambda khusus untuk memutuskan cara menangani kegagalan pemeriksaan kondisi. AWS AppSync 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 DynamoDB resolver 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](#aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling).

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

Secara default, ketika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB. Namun, AWS AppSync DynamoDB resolver menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika AWS AppSync DynamoDB resolver 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 resolver untuk menjalankan fungsi Lambda khusus untuk memutuskan bagaimana penyelesai DynamoDB AWS AppSync 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="checking-for-the-desired-result"></a>

Ketika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB melakukan permintaan DynamoDB `GetItem` untuk mendapatkan 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, AWS AppSync DynamoDB resolver 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 dokumen pemetaan `PutItem` permintaan terlihat seperti berikut:

  ```
  {
     "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" ]
     }
  }
  ```

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

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

  Penyelesai 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. AWS AppSync 
+ Untuk `DeleteItem` operasi, AWS AppSync DynamoDB resolver 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, penyelesai AWS AppSync DynamoDB tidak memiliki informasi yang cukup untuk menentukan apakah item yang saat ini ada 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, penyelesai 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="following-the-reject-strategy"></a>

Saat mengikuti `Reject` strategi, penyelesai 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 template pemetaan respons terlihat seperti berikut:

```
{
   "id" : $util.toJson($context.result.id),
   "Name" : $util.toJson($context.result.name),
   "theVersion" : $util.toJson($context.result.version)
}
```

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="following-the-custom-strategy"></a>

Saat mengikuti `Custom` strategi, penyelesai AWS AppSync DynamoDB memanggil fungsi Lambda untuk memutuskan apa yang harus dilakukan selanjutnya. Fungsi Lambda memilih salah satu opsi berikut:
+  `reject`mutasi. Ini memberitahu AWS AppSync DynamoDB resolver 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 AWS AppSync DynamoDB resolver untuk diam-diam mengabaikan kegagalan pemeriksaan kondisi dan mengembalikan nilai dalam DynamoDB.
+  `retry`mutasi. Ini memberitahu AWS AppSync DynamoDB resolver untuk mencoba lagi mutasi dengan dokumen pemetaan permintaan baru.

 **Permintaan doa Lambda** 

Penyelesai 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 sebagai berikut:

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

Bidang didefinisikan sebagai berikut:

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

** `requestMapping` **  
Dokumen pemetaan permintaan untuk operasi ini.

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

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

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

Contoh lengkap dari muatan:

```
{
    "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 penyelesai 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 memberitahu AWS AppSync DynamoDB resolver 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 AWS AppSync DynamoDB resolver 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 AWS AppSync DynamoDB resolver untuk mencoba lagi mutasi dengan dokumen pemetaan permintaan baru. Struktur `retryMapping` bagian tergantung pada operasi DynamoDB, dan merupakan bagian dari dokumen pemetaan permintaan lengkap untuk operasi itu.

  Untuk`PutItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `attributeValues` lapangan, lihat [PutItem](aws-appsync-resolver-mapping-template-reference-dynamodb-putitem.md).

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

  Untuk`UpdateItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `update` bagian ini, lihat [UpdateItem](aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem.md).

  ```
  {
      "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. AWS AppSync DynamoDB resolver 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, penyelesai 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="aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions"></a>

Ekspresi kondisi transaksi tersedia dalam template pemetaan 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="id22"></a>

Dokumen `DeleteItem` pemetaan transaksional berikut tidak memiliki ekspresi kondisi. Akibatnya, ia menghapus item di DynamoDB.

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
      }
   ]
}
```

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

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

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
         "condition": {
            "expression": "author = :author",
            "expressionValues": {
               ":author": { "S" : "Chunyan" }
            }
         }
      }
   ]
}
```

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="id24"></a>

Dokumen pemetaan `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:

```
"condition": {
    "expression": "someExpression",
    "expressionNames": {
        "#foo": "foo"
    },
    "expressionValues": {
        ":bar": ... typed value
    },
    "returnValuesOnConditionCheckFailure": false
}
```

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 Jenis Sistem (pemetaan permintaan). 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="aws-appsync-resolver-mapping-template-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. Proyeksi memiliki struktur berikut, yang mirip dengan filter: 

```
"projection" : {
    "expression" : "projection expression"
    "expressionNames" : {
        "#name" : "name",
    }
}
```

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="id25"></a>

Contoh berikut adalah bagian proyeksi untuk template pemetaan VTL 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 \$1context.info. selectionSetList](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#aws-appsync-resolver-context-reference-info). 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).