Un operando en la expresión de actualización tiene un tipo de datos incorrecto

TL;DR: la acción de actualización se verifica con lo que realmente está almacenado (y con el valor que envió), y uno de ellos no encaja: ADD con un atributo que no es un número o conjunto, list_append con algo que no es una lista, o un operando de conjunto cuyo tipo de elemento no coincide con el conjunto almacenado. Haga coincidir el operando con el tipo almacenado o corrija el elemento 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.

  5. Lee el Item antes de actualizarlo. Un GetItem rápido muestra si counter es N o S en esa fila concreta.

Ábrelo en DynoTable

El editor de Items de DynoTable muestra el tipo almacenado de cada atributo (S, N, L, SS, …) junto a su valor — una cadena "5" haciendo de contador numérico salta a la vista antes de que ejecutes ADD. Abre el Item con ⌘K e inspecciona los tipos; luego usa el área de preparación (⌘S) para probar la actualización.

Construye la expresión corregida en el Expression Builder con etiquetas de tipo explícitas. Cambia de perfil con ⌘P; consulta Conectar con AWS e Instalación.

Fuentes

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.