Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
UpdateItem
Dokumen pemetaan UpdateItem permintaan memungkinkan Anda memberi tahu resolver AWS AppSync DynamoDB untuk membuat UpdateItem permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan yang berikut:
-
Kunci item di DynamoDB
-
Ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB
-
Kondisi agar operasi berhasil
Dok UpdateItem umen 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
-
version -
Versi definisi template.
2017-02-28dan2018-05-29saat ini didukung. Nilai ini diperlukan. -
operation -
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi
UpdateItemDynamoDB, ini harus disetel ke.UpdateItemNilai ini diperlukan. -
key -
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci pengurutan, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang menentukan “nilai yang diketik”, lihat Sistem tipe (pemetaan permintaan). Nilai ini diperlukan.
-
update -
updateBagian 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 . Bagian ini diperlukan.updateBagian 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 di
expression, dan nilainya 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 di.expression -
expressionValues -
Substitusi untuk placeholder nilai atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan di
expression, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Sistem tipe (pemetaan permintaan). Ini harus ditentukan. Bidang ini opsional, dan hanya boleh diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan di.expression
-
-
condition -
Kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan,
UpdateItempermintaan memperbarui entri yang ada terlepas dari statusnya saat ini. Untuk informasi selengkapnya tentang kondisi, lihat Ek spresi kondisi. Nilai ini bersifat opsional. -
_version -
Nilai numerik yang mewakili versi terbaru dari item yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk Det eksi Konf lik dan hanya didukung pada sumber data berversi.
customPartitionKey-
Saat diaktifkan, nilai string ini mengubah format
ds_skdands_pkcatatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat Deteksi dan sinkronisasi konflik di Panduan Peng AWS AppSync embang). Saat diaktifkan, pemrosesanpopulateIndexFieldsentri juga diaktifkan. Ini adalah bidang opsional. populateIndexFields-
Nilai boolean yang, ketika diaktifkan bersama dengan
customPartitionKey, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolomgsi_ds_pkdangsi_ds_sk. Untuk informasi selengkapnya, lihat Deteksi dan sinkronisasi konflik di Panduan AWS AppSync Pengembang. Ini adalah bidang 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 Sistem tipe (pemetaan respons).
Untuk informasi selengkapnya tentang templat pemetaan respons, lihat ikhtisar templ at pemetaan Resolver.
Contoh 1
Contoh berikut adalah template pemetaan untuk mut upvote(id:
ID!) asi GraphQL.
Dalam contoh ini, item di DynamoDB memiliki version bidang upvotes dan yang bertambah dengan 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
Contoh berikut adalah template pemetaan untuk mut updateItem(id: ID!, title: String, author: String, expectedVersion:
Int!) asi GraphQL.
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 nilainyanull, 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 UpdateItem API, lihat dokumentasi DynamoDB API.