Un operando nell'espressione di aggiornamento ha un tipo di dati errato

TL;DR — L'azione dell'aggiornamento viene controllata per tipo rispetto a ciò che è effettivamente memorizzato (e rispetto al valore inviato) e uno di essi non si adatta: ADD rispetto a un attributo che non è un numero o un set, list_append rispetto a qualcosa che non è un elenco o un operando set il cui tipo di elemento non corrisponde al set memorizzato. Abbina l'operando al tipo memorizzato o correggi l'elemento il cui tipo è andato alla deriva.

Cosa significa

ValidationException: An operand in the update expression has an incorrect data type

Le azioni di aggiornamento hanno regole di tipo rigide: ADD funziona solo su numeri e set (SS/NS/BS), DELETE solo su set e list_append accetta due list. DynamoDB valuta l'espressione rispetto ai tipi di attributo correnti dell'elemento in fase di scrittura, quindi la stessa richiesta può avere successo su un elemento e fallire su un altro il cui attributo contiene un tipo diverso. Un cugino stretto viene rifiutato prima, al momento dell'analisi dell'espressione, quando il tipo del valore inviato non può mai adattarsi all'operatore:

ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LIST

Perché succede

  • ADD counter:one ma counter è memorizzato come stringa — ad es. l'elemento è stato importato con "5" (tipo S) invece di 5 (tipo N).
  • ADD tag :t con un operando elenco (L)ADD raccoglie in set, non elenchi. Gli elenchi vengono aggiunti con SET + list_append.
  • list_append(mylist, :v) dove mylist è una mappa, un insieme o uno scalare — entrambi gli argomenti devono essere elenchi (racchiudere un singolo elemento in un elenco di un solo elemento).
  • Mancata corrispondenza del tipo di elemento del setADD/DELETE con un operando di set di stringhe (SS) rispetto a un set di numeri memorizzato (NS) o viceversa.
  • Deriva del tipo tra gli elementi: autori misti (una vecchia importazione, un altro servizio) hanno lasciato lo stesso attributo "N" su alcuni elementi e "S" su altri, quindi l'aggiornamento fallisce solo a volte.

Come risolverlo

  1. Contatori: memorizza il valore come numero e invia un operando numerico:

    UpdateExpression: 'ADD #c :one',
    ExpressionAttributeValues: {':one': 1}   // {N: "1"} — not a string
  2. Elenchi: utilizza SET con list_append e racchiudi il nuovo elemento in un elenco:

    UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)',
    ExpressionAttributeValues: {':new': ['item'], ':empty': []}
  3. Insiemi: mantengono gli operandi ADD/DELETE nello stesso tipo di insieme dell'attributo memorizzato (SS con SS, NS con NS).

  4. Correggi gli elementi alla deriva: trova gli elementi il cui attributo porta il tipo sbagliato e riscrivili una volta; il sintomo "lo stesso aggiornamento non riesce su alcuni elementi" è sempre un dato, non un codice.

  5. Leggi l'elemento prima dell'aggiornamento. Un rapido GetItem mostra se counter è N o S su quella riga specifica.

Aprilo in DynoTable

L'editor degli elementi di DynoTable mostra il tipo memorizzato di ciascun attributo (S, N, L, SS, ...) accanto al suo valore: una stringa "5" che sostituisce un contatore numerico è ovvia prima di eseguire ADD. Apri l'elemento con ⌘K e controlla i tipi, quindi utilizza lo staging (⌘S) per testare l'aggiornamento.

Crea l'espressione corretta nel Generatore di espressioni con tag di tipo espliciti. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.