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 item

Dies 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 AttributSET score = score + :inc wirft, wenn score nie initialisiert wurde; die Inkrement-/Dekrement-Syntax der Docs operiert auf einem existierenden numerischen Attribut.
  • Kopieren aus einem fehlenden AttributSET backupEmail = email, wenn das Item kein email hat.
  • list_append auf einer fehlenden ListeSET tags = list_append(tags, :more), wenn tags noch 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

  1. 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)
  2. Säe das Attribut, wenn das Item erstellt wird — schreibe score: 0, tags: [] von vornherein, sodass spätere Reads immer auflösen.
  3. Substituiere nur das Blatt in einem verschachtelten Pfad — behalte die Punkte literal im Ausdruck: SET stats.#c = :v mit {"#c": "viewCount"}, nicht den vollen Pfad in einem Namen.
  4. Verifiziere, dass das Attribut existiert / Schreibweise + Groß-/Kleinschreibung mit einem GetItem, bevor du annimmst, dass der Pfad gültig ist.
  5. 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

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.