The provided expression refers to an attribute that does not exist in the item
TL;DR — Deine UpdateExpression liest ein Attribut, das nicht auf dem Item vorhanden ist — ein arithmetischer Operand (SET score = score + :inc, wenn score nie gesetzt war), eine Kopie aus einem anderen Attribut (SET a = b) oder ein list_append, dessen Listen-Operand fehlt. Sichere den Read mit if_not_exists, oder säe das Attribut, wenn das Item erstellt wird. (Das Schreiben auf einen verschachtelten Pfad, dessen Parent-Map fehlt, wirft den separaten Fehler "document path invalid for update".)
Was es bedeutet
ValidationException: The provided expression refers to an attribute
that does not exist in the itemDies ist eine HTTP 400 ValidationException. Die Anfrage wurde einwandfrei geparst, aber als DynamoDB sie gegen das Item auswertete, ist ein Attribut, das dein Ausdruck liest — ein Operand von +/-, die Quelle einer SET a = b-Kopie oder ein list_append-Argument — nicht da, sodass der Operand nicht aufgelöst werden kann. Es ist clientseitig und nicht wiederholbar: Dasselbe Item + derselbe Ausdruck reproduzieren es.
Warum es passiert
- Arithmetik auf einem nicht gesetzten Attribut —
SET score = score + :incwirft, wennscorenie initialisiert wurde; die Inkrement-/Dekrement-Syntax der Docs operiert auf einem existierenden numerischen Attribut. - Kopieren aus einem fehlenden Attribut —
SET backupEmail = email, wenn das Item keinemailhat. list_appendauf einer fehlenden Liste —SET tags = list_append(tags, :more), wenntagsnoch nicht existiert.- Falsche Platzhalter-Zuordnung für einen verschachtelten Pfad — den ganzen gepunkteten Pfad in einen
ExpressionAttributeNames-Eintrag abbilden ("#p": "stats.viewCount"), statt nur das Blatt zu substituieren; DynamoDB behandelt das literale"stats.viewCount"als einen einzelnen Attributnamen, der in dem Moment fehlt, in dem der Ausdruck ihn liest. - Ein Tippfehler oder falsche Groß-/Kleinschreibung in einem gelesenen Attributnamen — DynamoDB-Attributnamen sind case-sensitive.
So behebst du es
- Sichere den Read mit
if_not_exists, sodass der erste Write auch dann funktioniert, wenn das Attribut noch nicht da ist:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - Säe das Attribut, wenn das Item erstellt wird — schreibe
score: 0,tags: []von vornherein, sodass spätere Reads immer auflösen. - Substituiere nur das Blatt in einem verschachtelten Pfad — behalte die Punkte literal im Ausdruck:
SET stats.#c = :vmit{"#c": "viewCount"}, nicht den vollen Pfad in einem Namen. - Verifiziere, dass das Attribut existiert / Schreibweise + Groß-/Kleinschreibung mit einem
GetItem, bevor du annimmst, dass der Pfad gültig ist. - Schreibst du ein verschachteltes Child, dessen Parent-Map fehlt? Das ist der Geschwisterfehler — siehe the document path provided in the update expression is invalid for update für das zweistufige Parent-erstellen-Muster.
Willst du die reale Form des Items vor dir haben, während du das Update schreibst? Die DynoTable-Desktop-App zeigt jedes Attribut (einschließlich verschachtelter Maps und Listen), sodass ein fehlender Parent-Pfad auf einen Blick offensichtlich ist.
Verwandte Fehler
- The document path provided in the update expression is invalid for update — Schreiben auf einen verschachtelten Pfad, dessen Parent-Map/-Liste fehlt oder den falschen Typ hat.
- Invalid UpdateExpression syntax — der Ausdruck selbst ist fehlerhaft, vor diesem Check gefangen.
- Reserved keyword in attribute name — ein Name kollidiert mit einem reservierten Wort.
- ExpressionAttributeValues invalid
- Learn: Update-Expressions · Expression-Namen & -Werte
Referenzen
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.