The provided expression refers to an attribute that does not exist in the item
In breve — Il tuo UpdateExpression legge un attributo che non è presente sull'Item — un operando aritmetico (SET score = score + :inc quando score non è mai stato impostato), una copia da un altro attributo (SET a = b), o un list_append il cui operando lista è mancante. Proteggi la lettura con if_not_exists, o inizializza l'attributo alla creazione dell'Item. (Scrivere su un percorso nidificato la cui mappa genitore è mancante genera il diverso errore "document path invalid for update".)
Cosa significa
ValidationException: The provided expression refers to an attribute
that does not exist in the itemQuesta è una ValidationException HTTP 400. La richiesta è stata analizzata correttamente, ma quando DynamoDB l'ha valutata rispetto all'Item, un attributo che la tua espressione legge — un operando di +/-, la sorgente di una copia SET a = b, o un argomento di list_append — non c'è, quindi l'operando non può risolversi. È lato client e non ripetibile: lo stesso Item + espressione lo riproduce.
Perché succede
- Aritmetica su un attributo non impostato —
SET score = score + :incgenera errore quandoscorenon è mai stato inizializzato; la sintassi di incremento/decremento della documentazione opera su un attributo numerico esistente. - Copia da un attributo mancante —
SET backupEmail = emailquando l'Item non haemail. list_appendsu una lista mancante —SET tags = list_append(tags, :more)quandotagsnon esiste ancora.- Mappatura errata dei placeholder per un percorso nidificato — mappare l'intero percorso puntato in una singola voce di
ExpressionAttributeNames("#p": "stats.viewCount") invece di sostituire solo la foglia; DynamoDB tratta il letterale"stats.viewCount"come un unico nome di attributo, che è mancante nel momento in cui l'espressione lo legge. - Un refuso o maiuscole/minuscole errate in un nome di attributo letto — i nomi degli attributi DynamoDB sono case-sensitive.
Come risolverlo
- Proteggi la lettura con
if_not_existscosì la prima scrittura funziona anche quando l'attributo non c'è ancora:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - Inizializza l'attributo alla creazione dell'Item — scrivi
score: 0,tags: []fin dall'inizio così le letture successive si risolvono sempre. - Sostituisci solo la foglia in un percorso nidificato — mantieni i punti letterali nell'espressione:
SET stats.#c = :vcon{"#c": "viewCount"}, non l'intero percorso in un solo nome. - Verifica che l'attributo esista / l'ortografia + maiuscole con un
GetItemprima di presumere che il percorso sia valido. - Stai scrivendo un figlio nidificato la cui mappa genitore è mancante? Quello è l'errore fratello — vedi the document path provided in the update expression is invalid for update per il pattern crea-genitore in due passaggi.
Vuoi la forma reale dell'Item davanti a te mentre scrivi l'aggiornamento? L'app desktop DynoTable mostra ogni attributo (incluse mappe e liste nidificate) così un percorso genitore mancante è ovvio a colpo d'occhio.
Errori correlati
- The document path provided in the update expression is invalid for update — scrittura su un percorso nidificato la cui mappa/lista genitore è mancante o del tipo sbagliato.
- Invalid UpdateExpression syntax — l'espressione stessa è malformata, intercettata prima di questo controllo.
- Reserved keyword in attribute name — un nome collide con una parola riservata.
- ExpressionAttributeValues invalid
- Impara: Update expressions · Expression names & values
Riferimenti
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.