Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
UpdateItem
La UpdateItem richiesta consente di dire alla funzione AWS AppSync DynamoDB di effettuare una UpdateItem richiesta a DynamoDB e consente di specificare quanto segue:
-
La chiave dell'elemento in DynamoDB
-
Un'espressione di aggiornamento che descrive come aggiornare l'elemento in DynamoDB
-
Condizioni per la riuscita dell'operazione
La UpdateItem richiesta ha la seguente struttura:
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; };
I campi sono definiti come segue:
UpdateItem campi
-
operation -
L'operazione DynamoDB da eseguire. Per eseguire l'operazione
UpdateItemDynamoDB, il valore deve essere impostato suUpdateItem. Questo valore è obbligatorio. -
key -
La chiave dell'elemento in DynamoDB. Gli elementi DynamoDB possono avere una singola chiave hash o una chiave hash e una chiave di ordinamento, a seconda della struttura della tabella. Per ulteriori informazioni sulla specifica di un «valore digitato», vedi Type system (request mapping). Questo valore è obbligatorio.
-
update -
La
updatesezione consente di specificare un'espressione di aggiornamento che descrive come aggiornare l'elemento in DynamoDB. Per ulteriori informazioni su come scrivere espressioni di aggiornamento, consulta la documentazione di DynamoDB UpdateExpressions . Questa sezione è obbligatoria.La sezione
updateha tre componenti:-
expression -
L'espressione di aggiornamento. Questo valore è obbligatorio.
-
expressionNames -
Le sostituzioni per i segnaposto dell'attributo di espressione name sotto forma di coppie chiave-valore. La chiave corrisponde a un segnaposto utilizzato in
expression, e il valore deve essere una stringa corrispondente al nome dell'attributo dell'elemento in DynamoDB. Questo è un campo facoltativo in cui vanno riportate solo le sostituzioni per i segnaposto dell'attributo di espressione name utilizzate inexpression. -
expressionValues -
Le sostituzioni per i segnaposto dell'attributo di espressione value sotto forma di coppie chiave-valore. La chiave corrisponde a un segnaposto per un valore utilizzato in
expression, mentre il valore deve essere un valore tipizzato. Per ulteriori informazioni su come specificare un «valore digitato», vedi Type system (request mapping). Questo elemento deve essere specificato. Questo è un campo facoltativo in cui vanno riportate solo le sostituzioni per i segnaposto dell'attributo di espressione value utilizzate inexpression.
-
-
condition -
Una condizione per determinare se la richiesta deve riuscire o no in base allo stato dell'oggetto già incluso in DynamoDB. Se non viene specificata alcuna condizione, la richiesta
UpdateItemaggiorna qualsiasi valore esistente, indipendentemente dal suo stato attuale. Per ulteriori informazioni sulle condizioni, vedere Espressioni condizionali. Questo valore è facoltativo. -
_version -
Valore numerico che rappresenta l'ultima versione nota di un elemento. Questo valore è facoltativo. Questo campo viene utilizzato per il rilevamento dei conflitti ed è supportato solo nelle origini dati con versione.
customPartitionKey-
Se abilitato, questo valore di stringa modifica il formato dei
ds_pkrecordds_ske utilizzati dalla tabella delta sync quando il controllo delle versioni è abilitato (per ulteriori informazioni, consulta Rilevamento e sincronizzazione dei conflitti nella Guida per gli AWS AppSync sviluppatori). Se abilitata, è abilitata anche l'elaborazione dellapopulateIndexFieldsvoce. Questo campo è facoltativo. populateIndexFields-
Un valore booleano che, se abilitato insieme a
customPartitionKey, crea nuove voci per ogni record nella tabella delta sync, in particolare nelle colonnegsi_ds_pkegsi_ds_sk. Per ulteriori informazioni, consulta Rilevamento e sincronizzazione dei conflitti nella Guida per gli AWS AppSync sviluppatori. Questo campo è facoltativo.
L'elemento aggiornato in DynamoDB viene automaticamente convertito nei tipi primitivi GraphQL e JSON ed è disponibile nel risultato del contesto (). context.result
Per ulteriori informazioni sulla conversione dei tipi DynamoDB, vedere Type system (response mapping).
Per ulteriori informazioni sui JavaScript resolver, consulta la panoramica dei resolver. JavaScript
Esempio 1
L'esempio seguente è un gestore di richieste di funzioni per la mutazione GraphQL. upvote(id: ID!)
In questo esempio, un elemento in DynamoDB ha i suoi campi upvotes e version incrementati di 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 } }, }, }; }
Esempio 2
L'esempio seguente è un gestore di richieste di funzioni per una mutazione GraphQL. updateItem(id: ID!, title: String, author: String, expectedVersion:
Int!)
Si tratta di un esempio complesso che verifica gli argomenti e genera dinamicamente l'espressione di aggiornamento in cui sono inclusi solo gli argomenti forniti dal client. Ad esempio, se title e author vengono omessi, non vengono aggiornati. Se viene specificato un argomento ma il suo valore sìnull, quel campo viene eliminato dall'oggetto in DynamoDB. Infine, l'operazione ha una condizione, che verifica se l'elemento attualmente in DynamoDB ha il campo impostato su: version 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), }, }; }
Per ulteriori informazioni sull'API UpdateItem di DynamoDB, consulta la documentazione API di DynamoDB.