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 type

Las 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: LIST

Por qué ocurre

  • ADD counter :one pero counter está almacenado como cadena — p. ej. el Item se importó con "5" (tipo S) en lugar de 5 (tipo N).
  • ADD tags :t con un operando de lista (L)ADD acumula en conjuntos, no en listas. Las listas se añaden con SET + list_append.
  • list_append(mylist, :v) donde mylist es 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 conjuntoADD/DELETE con 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 N en algunos Items y S en otros, así que la actualización falla solo a veces.

Cómo solucionarlo

  1. 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 string
  2. Listas: usa SET con list_append, y envuelve el nuevo elemento en una lista:

    UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)',
    ExpressionAttributeValues: {':new': ['item'], ':empty': []}
  3. Conjuntos: mantén los operandos de ADD/DELETE con el mismo tipo de conjunto que el atributo almacenado (SS con SS, NS con NS).

  4. 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

References

Última verificación el 2026-07-13 con la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.