La expresión proporcionada hace referencia a un atributo que no existe en el Item

TL;DR — Tu UpdateExpression lee un atributo que no está presente en el Item — un operando aritmético (SET score = score + :inc cuando score nunca se estableció), una copia desde otro atributo (SET a = b), o un list_append cuyo operando de lista falta. Protege la lectura con if_not_exists, o siembra el atributo al crear el Item. (Escribir en una ruta anidada cuyo mapa padre falta lanza el error separado "document path invalid for update".)

Qué significa

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

Esto es una ValidationException HTTP 400. La petición se parseó bien, pero cuando DynamoDB la evaluó contra el Item, un atributo que tu expresión lee — un operando de +/-, el origen de una copia SET a = b, o un argumento de list_append — no está ahí, así que el operando no puede resolverse. Es del lado del cliente y no reintentable: el mismo Item + expresión lo reproduce.

Por qué ocurre

  • Aritmética sobre un atributo no establecidoSET score = score + :inc lanza el error cuando score nunca se inicializó; la sintaxis de incremento/decremento de los docs opera sobre un atributo numérico existente.
  • Copiar desde un atributo ausenteSET backupEmail = email cuando el Item no tiene email.
  • list_append sobre una lista ausenteSET tags = list_append(tags, :more) cuando tags aún no existe.
  • Mapeo de marcador incorrecto para una ruta anidada — mapear toda la ruta con puntos en una sola entrada de ExpressionAttributeNames ("#p": "stats.viewCount") en lugar de sustituir solo la hoja; DynamoDB trata el literal "stats.viewCount" como un único nombre de atributo, que falta en el momento en que la expresión lo lee.
  • Una errata o mayúscula/minúscula incorrecta en un nombre de atributo leído — los nombres de atributo de DynamoDB distinguen mayúsculas de minúsculas.

Cómo solucionarlo

  1. Protege la lectura con if_not_exists para que la primera escritura funcione incluso cuando el atributo aún no está ahí:
    SET score = if_not_exists(score, :zero) + :inc
    SET tags = list_append(if_not_exists(tags, :emptyList), :more)
  2. Siembra el atributo al crear el Item — escribe score: 0, tags: [] desde el principio para que las lecturas posteriores siempre se resuelvan.
  3. Sustituye solo la hoja en una ruta anidada — mantén los puntos literales en la expresión: SET stats.#c = :v con {"#c": "viewCount"}, no la ruta completa en un solo nombre.
  4. Verifica que el atributo existe / ortografía + mayúsculas con un GetItem antes de asumir que la ruta es válida.
  5. ¿Escribiendo un hijo anidado cuyo mapa padre falta? Ese es el error hermano — consulta the document path provided in the update expression is invalid for update para el patrón de crear-padre en dos pasos.

¿Quieres la forma real del Item delante de ti mientras escribes la actualización? La aplicación de escritorio DynoTable muestra cada atributo (incluidos mapas y listas anidados) para que una ruta padre ausente sea obvia de un vistazo.

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.