An operand in the update expression has an incorrect data type
In breve — L'azione dell'aggiornamento viene controllata a livello di tipo rispetto a ciò che è effettivamente memorizzato (e rispetto al valore che hai inviato), e uno di essi non corrisponde: ADD su un attributo che non è un numero o un set, list_append su qualcosa che non è una lista, o un operando di set il cui tipo di elemento non corrisponde al set memorizzato. Fai corrispondere l'operando al tipo memorizzato — o correggi l'Item il cui tipo è derivato.
Cosa significa
ValidationException: An operand in the update expression has an incorrect data typeLe azioni di aggiornamento hanno regole di tipo rigorose: ADD funziona solo su numeri e set (SS/NS/BS), DELETE solo su set, e list_append prende due liste. DynamoDB valuta l'espressione rispetto ai tipi attuali degli attributi dell'Item al momento della scrittura — quindi la stessa richiesta può riuscire su un Item 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: LISTPerché accade
ADD counter :onemacounterè memorizzato come stringa — es. l'Item è stato importato con"5"(tipoS) invece di5(tipoN).ADD tags :tcon un operando lista (L) —ADDraccoglie in set, non liste. Le liste vengono aggiunte conSET+list_append.list_append(mylist, :v)dovemylistè una mappa, un set, o uno scalare — entrambi gli argomenti devono essere liste (racchiudi un singolo elemento come una lista di un elemento).- Mancata corrispondenza del tipo di elemento del set —
ADD/DELETEcon un operando string set (SS) su un number set (NS) memorizzato, o viceversa. - Deriva di tipo tra Item — writer misti (un vecchio import, un altro servizio) hanno lasciato lo stesso attributo come
Nsu alcuni Item eSsu altri, quindi l'aggiornamento fallisce solo a volte.
Come correggerlo
Contatori: memorizza il valore come numero e invia un operando numerico:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringListe: usa
SETconlist_append, e racchiudi il nuovo elemento in una lista:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Set: mantieni gli operandi
ADD/DELETEdello stesso tipo di set dell'attributo memorizzato (SSconSS,NSconNS).Correggi gli Item derivati — trova gli Item il cui attributo porta il tipo sbagliato e riscrivili una volta; il sintomo "lo stesso aggiornamento fallisce su alcuni Item" è sempre dati, non codice.
La deriva di tipo è invisibile nella maggior parte delle console — l'app desktop DynoTable mostra il tipo effettivamente memorizzato di ogni attributo accanto al suo valore, così un contatore "5"-come-stringa risalta immediatamente.
Errori correlati
- Float types are not supported — attrito di tipo numerico dal lato SDK.
- Number overflow
- Type mismatch: key element does not match schema
- Impara: 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
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.