An operand in the update expression has an incorrect data type
TL;DR — La acción de la actualización se comprueba por tipo contra lo que hay realmente almacenado (y contra el valor que enviaste), y uno de ellos no encaja: ADD contra un atributo que no es un número ni un conjunto, list_append contra algo que no es una lista, o un operando de conjunto cuyo tipo de elemento no coincide con el conjunto almacenado. Haz coincidir el operando con el tipo almacenado — o corrige el Item cuyo tipo se desvió.
Qué significa
ValidationException: An operand in the update expression has an incorrect data typeLas acciones de actualización tienen reglas de tipo estrictas: ADD funciona solo con números y conjuntos (SS/NS/BS), DELETE solo con conjuntos, y list_append toma dos listas. DynamoDB evalúa la expresión contra los tipos de atributo actuales del Item en el momento de la escritura — así que la misma petición puede tener éxito en un Item y fallar en otro cuyo atributo contiene un tipo diferente. Un pariente cercano se rechaza antes, en el momento de analizar la expresión, cuando el tipo del valor enviado nunca puede encajar con el operador:
ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LISTPor qué ocurre
ADD counter :oneperocounterestá almacenado como cadena — p. ej. el Item se importó con"5"(tipoS) en lugar de5(tipoN).ADD tags :tcon un operando de lista (L) —ADDacumula en conjuntos, no en listas. Las listas se añaden conSET+list_append.list_append(mylist, :v)dondemylistes un mapa, conjunto o escalar — ambos argumentos deben ser listas (envuelve un solo elemento como una lista de un elemento).- Desajuste de tipo de elemento de conjunto —
ADD/DELETEcon un operando de conjunto de cadenas (SS) contra un conjunto de números (NS) almacenado, o viceversa. - Deriva de tipo entre Items — escritores mixtos (una importación antigua, otro servicio) dejaron el mismo atributo como
Nen algunos Items ySen otros, así que la actualización falla solo a veces.
Cómo solucionarlo
Contadores: almacena el valor como número y envía un operando numérico:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringListas: usa
SETconlist_append, y envuelve el nuevo elemento en una lista:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Conjuntos: mantén los operandos de
ADD/DELETEcon el mismo tipo de conjunto que el atributo almacenado (SSconSS,NSconNS).Corrige los Items desviados — encuentra los Items cuyo atributo lleva el tipo incorrecto y reescríbelos una vez; el síntoma de "la misma actualización falla en algunos Items" siempre es de datos, no de código.
La deriva de tipo es invisible en la mayoría de consolas — la aplicación de escritorio DynoTable muestra el tipo real almacenado de cada atributo junto a su valor, así que un contador "5" como cadena destaca de inmediato.
Errores relacionados
- Float types are not supported — fricción de tipo numérico desde el lado del SDK.
- Number overflow
- Type mismatch: key element does not match schema
- Aprende: Update expressions · Atomic counters · Data types
References
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Última verificación el 2026-07-13 con la documentación oficial de AWS enlazada arriba.