The provided expression refers to an attribute that does not exist in the item

En bref — Ton UpdateExpression lit un attribut qui n'est pas présent sur l'élément — un opérande arithmétique (SET score = score + :inc quand score n'a jamais été défini), une copie depuis un autre attribut (SET a = b), ou un list_append dont l'opérande liste est manquant. Protège la lecture avec if_not_exists, ou amorce l'attribut à la création de l'élément. (Écrire vers un chemin imbriqué dont le map parent est manquant lève l'erreur distincte "document path invalid for update".)

Ce que ça signifie

ValidationException: The provided expression refers to an attribute
that does not exist in the item

C'est un HTTP 400 ValidationException. La requête a été analysée sans problème, mais quand DynamoDB l'a évaluée face à l'élément, un attribut que ton expression lit — un opérande de +/-, la source d'une copie SET a = b, ou un argument de list_append — n'est pas là, donc l'opérande ne peut pas se résoudre. C'est côté client et non réessayable : le même élément + la même expression le reproduisent.

Pourquoi ça arrive

  • Arithmétique sur un attribut non définiSET score = score + :inc lève quand score n'a jamais été initialisé ; la syntaxe d'incrément/décrément des docs opère sur un attribut numérique existant.
  • Copier depuis un attribut manquantSET backupEmail = email quand l'élément n'a pas d'email.
  • list_append sur une liste manquanteSET tags = list_append(tags, :more) quand tags n'existe pas encore.
  • Mauvais mapping de placeholder pour un chemin imbriqué — mapper tout le chemin pointé dans une seule entrée ExpressionAttributeNames ("#p": "stats.viewCount") au lieu de ne substituer que la feuille ; DynamoDB traite le littéral "stats.viewCount" comme un nom d'attribut unique, qui est manquant dès que l'expression le lit.
  • Une faute de frappe ou une mauvaise casse dans un nom d'attribut lu — les noms d'attributs DynamoDB sont sensibles à la casse.

Comment le corriger

  1. Protège la lecture avec if_not_exists pour que la première écriture fonctionne même quand l'attribut n'est pas encore là :
    SET score = if_not_exists(score, :zero) + :inc
    SET tags = list_append(if_not_exists(tags, :emptyList), :more)
  2. Amorce l'attribut à la création de l'élément — écris score: 0, tags: [] d'emblée pour que les lectures ultérieures se résolvent toujours.
  3. Ne substitue que la feuille dans un chemin imbriqué — garde les points littéraux dans l'expression : SET stats.#c = :v avec {"#c": "viewCount"}, pas le chemin complet dans un seul nom.
  4. Vérifie que l'attribut existe / l'orthographe + la casse avec un GetItem avant de supposer que le chemin est valide.
  5. Tu écris un enfant imbriqué dont le map parent est manquant ? C'est l'erreur sœur — voir the document path provided in the update expression is invalid for update pour le motif en deux étapes de création du parent.

Tu veux avoir la forme réelle de l'élément sous les yeux pendant que tu écris la mise à jour ? L'application de bureau DynoTable montre chaque attribut (y compris les maps et listes imbriqués) pour qu'un chemin parent manquant soit évident d'un coup d'œil.

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.