Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
UpdateItem
Per UpdateItem mintaan memungkinkan Anda untuk memberi tahu fungsi AWS AppSync DynamoDB untuk membuat UpdateItem permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan yang berikut:
-
Kunci item di DynamoDB
-
Ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB
-
Kondisi agar operasi berhasil
Per UpdateItem mintaan memiliki struktur sebagai berikut:
type DynamoDBUpdateItemRequest = { operation: 'UpdateItem'; key: { [key: string]: any }; update: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; condition?: ConditionCheckExpression; customPartitionKey?: string; populateIndexFields?: boolean; _version?: number; };
Bidang didefinisikan sebagai berikut:
UpdateItem bidang
-
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 hasil konteks (). context.result
Untuk informasi selengkapnya tentang konversi tipe DynamoDB, lihat Sistem tipe (pemetaan respons).
Untuk informasi selengkapnya tentang JavaScript resolver, lihat ikhtisar JavaScript resolver.
Contoh 1
Contoh berikut adalah handler permintaan fungsi untuk mut upvote(id: ID!) asi GraphQL.
Dalam contoh ini, item di DynamoDB memiliki version bidang upvotes dan yang bertambah dengan 1.
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { id } = ctx.args; return { operation: 'UpdateItem', key: util.dynamodb.toMapValues({ id }), update: { expression: 'ADD #votefield :plusOne, version :plusOne', expressionNames: { '#votefield': 'upvotes' }, expressionValues: { ':plusOne': { N: 1 } }, }, }; }
Contoh 2
Contoh berikut adalah handler permintaan fungsi 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
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { args: { input: { id, ...values } } } = ctx; const condition = { id: { attributeExists: true }, version: { eq: values.expectedVersion }, }; values.expectedVersion += 1; return dynamodbUpdateRequest({ keys: { id }, values, condition }); } /** * Helper function to update an item * @returns an UpdateItem request */ function dynamodbUpdateRequest(params) { const { keys, values, condition: inCondObj } = params; const sets = []; const removes = []; const expressionNames = {}; const expValues = {}; // Iterate through the keys of the values for (const [key, value] of Object.entries(values)) { expressionNames[`#${key}`] = key; if (value) { sets.push(`#${key} = :${key}`); expValues[`:${key}`] = value; } else { removes.push(`#${key}`); } } let expression = sets.length ? `SET ${sets.join(', ')}` : ''; expression += removes.length ? ` REMOVE ${removes.join(', ')}` : ''; const condition = JSON.parse( util.transform.toDynamoDBConditionExpression(inCondObj) ); return { operation: 'UpdateItem', key: util.dynamodb.toMapValues(keys), condition, update: { expression, expressionNames, expressionValues: util.dynamodb.toMapValues(expValues), }, }; }
Untuk informasi selengkapnya tentang DynamoDB UpdateItem API, lihat dokumentasi DynamoDB API.