The provided expression refers to an attribute that does not exist in the item
TL;DR — Seu UpdateExpression lê um atributo que não está presente no item — um operando aritmético (SET score = score + :inc quando score nunca foi definido), uma cópia de outro atributo (SET a = b), ou um list_append cujo operando de list está ausente. Proteja a leitura com if_not_exists, ou semeie o atributo quando o item é criado. (Escrever em um caminho aninhado cujo map pai está ausente levanta o erro separado "document path invalid for update".)
O que significa
ValidationException: The provided expression refers to an attribute
that does not exist in the itemEste é um HTTP 400 ValidationException. A requisição fez o parse bem, mas quando o DynamoDB a avaliou contra o item, um atributo que sua expressão lê — um operando de +/-, a origem de uma cópia SET a = b, ou um argumento de list_append — não está lá, então o operando não consegue resolver. É do lado do cliente e não retentável: o mesmo item + expressão o reproduz.
Por que isso acontece
- Aritmética sobre um atributo não definido —
SET score = score + :inclança quandoscorenunca foi inicializado; a sintaxe de incremento/decremento dos docs opera sobre um atributo numérico existente. - Copiar de um atributo ausente —
SET backupEmail = emailquando o item não tememail. list_appendsobre uma list ausente —SET tags = list_append(tags, :more)quandotagsainda não existe.- Mapeamento de placeholder errado para um caminho aninhado — mapear todo o caminho pontilhado em uma entrada
ExpressionAttributeNames("#p": "stats.viewCount") em vez de substituir apenas a folha; o DynamoDB trata o literal"stats.viewCount"como um único nome de atributo, que está ausente no momento em que a expressão o lê. - Um erro de digitação ou maiúsculas erradas em um nome de atributo lido — nomes de atributo do DynamoDB são sensíveis a maiúsculas.
Como corrigir
- Proteja a leitura com
if_not_existspara que a primeira escrita funcione mesmo quando o atributo ainda não está lá:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - Semeie o atributo quando o item é criado — escreva
score: 0,tags: []de antemão para que leituras posteriores sempre resolvam. - Substitua apenas a folha em um caminho aninhado — mantenha os pontos literais na expressão:
SET stats.#c = :vcom{"#c": "viewCount"}, não o caminho inteiro em um nome. - Verifique se o atributo existe / grafia + maiúsculas com um
GetItemantes de supor que o caminho é válido. - Escrevendo um filho aninhado cujo map pai está ausente? Esse é o erro irmão — veja the document path provided in the update expression is invalid for update para o padrão de dois passos de criar-o-pai.
Quer a forma real do item na sua frente enquanto escreve a atualização? O app desktop DynoTable mostra todo atributo (incluindo maps e lists aninhados) para que um caminho pai ausente fique óbvio num relance.
Erros relacionados
- The document path provided in the update expression is invalid for update — escrever em um caminho aninhado cujo map/list pai está ausente ou é do tipo errado.
- Invalid UpdateExpression syntax — a própria expressão está malformada, capturada antes desta verificação.
- Reserved keyword in attribute name — um nome colide com uma palavra reservada.
- ExpressionAttributeValues invalid
- Aprenda: Update expressions · Expression names & values
Referências
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.