View a markdown version of this page

UpdateItem - AWS AppSync GraphQL

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

UpdateItem

Mit der UpdateItem Anforderung können Sie die AWS AppSync DynamoDB-Funktion anweisen, eine UpdateItem Anforderung an DynamoDB zu stellen, und Sie können Folgendes angeben:

  • Der Schlüssel des Elements in DynamoDB

  • Ein Aktualisierungsausdruck, der beschreibt, wie das Element in DynamoDB aktualisiert wird

  • Bedingungen, damit die Operation erfolgreich ausgeführt werden kann

Die UpdateItem Anfrage hat die folgende Struktur:

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

Die Felder sind wie folgt definiert:

UpdateItem Felder

operation

Die auszuführende DynamoDB-Operation. Um die UpdateItem-DynamoDB-Operation durchzuführen, muss diese auf UpdateItem gesetzt sein. Dieser Wert ist erforderlich.

key

Der Schlüssel des Elements in DynamoDB. DynamoDB-Elemente können je nach Tabellenstruktur einen einzelnen Hashschlüssel oder einen Hashschlüssel und einen Sortierschlüssel haben. Weitere Hinweise zur Angabe eines „typisierten Werts“ finden Sie unter Typsystem (Anforderungszuordnung). Dieser Wert ist erforderlich.

update

updateIn diesem Abschnitt können Sie einen Aktualisierungsausdruck angeben, der beschreibt, wie das Element in DynamoDB aktualisiert wird. Weitere Informationen zum Schreiben von Aktualisierungsausdrücken finden Sie in der UpdateExpressions DynamoDB-Dokumentation. Dieser Abschnitt ist erforderlich.

Der update-Abschnitt enthält drei Komponenten:

expression

Den Aktualisierungsausdruck. Dieser Wert ist erforderlich.

expressionNames

Die Ersetzungen für Platzhalter der Namen von Ausdrucksattributen in Form von Schlüssel-Wert-Paaren. Der Schlüssel entspricht einem Namensplatzhalterexpression, der in der verwendet wird, und der Wert muss eine Zeichenfolge sein, die dem Attributnamen des Elements in DynamoDB entspricht. Dieses Feld ist optional und sollte nur mit Ersetzungen für Platzhalter der Namen von Ausdrucksattributen gefüllt sein, die im expression verwendet werden.

expressionValues

Die Ersetzungen für Platzhalter der Werte von Ausdrucksattributen in Form von Schlüssel-Wert-Paaren. Der Schlüssel entspricht einem Wertplatzhalter, der im expression verwendet wird, und der Wert muss ein typisierter Wert sein. Weitere Informationen zum Angeben eines „typisierten Werts“ finden Sie unter Typsystem (Anforderungszuordnung). Dieser muss angegeben werden. Dieses Feld ist optional und sollte nur mit Ersetzungen für Platzhalter der Werte von Ausdrucksattributen gefüllt sein, die im expression verwendet werden.

condition

Eine Bedingung, um zu bestimmen, ob die Anforderung erfolgreich sein soll oder nicht, basierend auf dem Status des Objekts, das sich bereits in DynamoDB befindet. Wenn keine Bedingung angegeben ist, aktualisiert die UpdateItem-Anforderung jeden vorhandenen Eintrag unabhängig vom aktuellen Status. Weitere Informationen zu Bedingungen finden Sie unter Bedingungsausdrücke. Dieser Wert ist optional.

_version

Ein numerischer Wert, der die neueste bekannte Version eines Elements darstellt. Dieser Wert ist optional. Dieses Feld wird für die Konflikterkennung verwendet und nur für versionsgesteuerte Datenquellen unterstützt.

customPartitionKey

Wenn diese Option aktiviert ist, ändert dieser Zeichenfolgenwert das Format der ds_pk UND-Datensätze, die ds_sk von der Delta-Sync-Tabelle verwendet werden, wenn die Versionierung aktiviert wurde (weitere Informationen finden Sie unter Konflikterkennung und -synchronisierung im AWS AppSync Entwicklerhandbuch). Wenn diese Option aktiviert ist, ist auch die Verarbeitung des populateIndexFields Eintrags aktiviert. Dies ist ein optionales Feld.

populateIndexFields

Ein boolescher Wert, der, wenn er zusammen mit dem aktiviert ist customPartitionKey, neue Einträge für jeden Datensatz in der Delta-Sync-Tabelle erstellt, insbesondere in den Spalten gsi_ds_pk undgsi_ds_sk. Weitere Informationen finden Sie unter Konflikterkennung und -synchronisierung im AWS AppSync Entwicklerhandbuch. Dies ist ein optionales Feld.

Das in DynamoDB aktualisierte Element wird automatisch in die primitiven GraphQL- und JSON-Typen konvertiert und ist im Kontext result () verfügbar. context.result

Weitere Informationen zur DynamoDB-Typkonvertierung finden Sie unter Typsystem (Antwortzuordnung).

Weitere Informationen zu JavaScript Resolvern finden Sie unter JavaScript Übersicht über Resolver.

Beispiel 1

Das folgende Beispiel ist ein Funktionsanforderungshandler für die GraphQL-Mutation. upvote(id: ID!)

In diesem Beispiel werden die version Felder upvotes und für ein Element in DynamoDB um 1 erhöht.

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

Beispiel 2

Das folgende Beispiel ist ein Funktionsanforderungshandler für eine GraphQL-Mutation. updateItem(id: ID!, title: String, author: String, expectedVersion: Int!)

Hierbei handelt es sich um ein komplexes Beispiel, das die Argumente prüft und den Aktualisierungsausdruck dynamisch generiert, der nur die Argumente enthält, die vom Client bereitgestellt wurden. Beispiel: Wenn title und author nicht angegeben werden, werden sie nicht aktualisiert. Wenn ein Argument angegeben ist, sein Wert jedochnull, wird dieses Feld aus dem Objekt in DynamoDB gelöscht. Schließlich hat die Operation eine Bedingung, die überprüft, ob für das aktuell in DynamoDB befindliche Element das Feld wie folgt festgelegt ist: 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), }, }; }

Weitere Informationen zur DynamoDB UpdateItem-API finden Sie in der DynamoDB API-Dokumentation.