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 itemEsto 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 establecido —
SET score = score + :inclanza el error cuandoscorenunca se inicializó; la sintaxis de incremento/decremento de los docs opera sobre un atributo numérico existente. - Copiar desde un atributo ausente —
SET backupEmail = emailcuando el Item no tieneemail. list_appendsobre una lista ausente —SET tags = list_append(tags, :more)cuandotagsaú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
- Protege la lectura con
if_not_existspara 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) - Siembra el atributo al crear el Item — escribe
score: 0,tags: []desde el principio para que las lecturas posteriores siempre se resuelvan. - Sustituye solo la hoja en una ruta anidada — mantén los puntos literales en la expresión:
SET stats.#c = :vcon{"#c": "viewCount"}, no la ruta completa en un solo nombre. - Verifica que el atributo existe / ortografía + mayúsculas con un
GetItemantes de asumir que la ruta es válida. - ¿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
- The document path provided in the update expression is invalid for update — escribir en una ruta anidada cuyo mapa/lista padre falta o es del tipo incorrecto.
- Invalid UpdateExpression syntax — la propia expresión está mal formada, detectada antes de esta comprobación.
- Reserved keyword in attribute name — un nombre colisiona con una palabra reservada.
- ExpressionAttributeValues no válido
- Aprende: Update expressions · Nombres y valores de expresión
Referencias
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.