The provided expression refers to an attribute that does not exist in the item

TL;DR — UpdateExpression または ConditionExpression が、アイテムに存在しない属性を 読み取って います。算術オペランド(score が一度も設定されていないのに SET score = score + :inc)、別属性からのコピー(SET a = b)、またはリストオペランドが欠落した list_append などです。if_not_exists で読み取りをガードするか、アイテム作成時に属性をシードしてください。(親マップが欠落したネストパスへの書き込みは、別の "document path invalid for update" エラーを発生させます。)

意味

ValidationException: The provided expression refers to an attribute
that does not exist in the item

これは HTTP 400 の ValidationException です。リクエストは正しく解析されましたが、DynamoDB がそれをアイテムに対して評価したとき、式が 読み取る 属性 — +/- のオペランド、SET a = b コピーのソース、または list_append の引数 — がそこになく、オペランドが解決できませんでした。クライアント側の問題でリトライ不可 です。同じアイテム + 式が再現します。

発生する理由

  • 未設定の属性に対する算術score が一度も初期化されていないと SET score = score + :inc がスローします。ドキュメントの増減構文は 既存の 数値属性を操作します。
  • 欠落した属性からのコピー — アイテムに email がないのに SET backupEmail = email
  • 欠落したリストに対する list_appendtags がまだ存在しないのに SET tags = list_append(tags, :more)
  • ネストパスの誤ったプレースホルダーマッピング — リーフだけを置換するのではなく、ドット付きパス全体を1つの ExpressionAttributeNames エントリ("#p": "stats.viewCount")にマッピングしている。DynamoDB はリテラルの "stats.viewCount" を単一の属性名として扱い、式が読み取る瞬間にそれは欠落しています。
  • 読み取り属性名の タイプミスや誤った大文字小文字 — DynamoDB の属性名は大文字小文字を区別します。

修正方法

  1. if_not_exists で読み取りをガードします — 属性がまだなくても最初の書き込みが動作するように:
    SET score = if_not_exists(score, :zero) + :inc
    SET tags = list_append(if_not_exists(tags, :emptyList), :more)
  2. アイテム作成時に属性をシードします — 前もって score: 0tags: [] を書けば、後の読み取りは常に解決します。
  3. ネストパスでは リーフだけを置換します — 式ではドットをリテラルに保ちます: 1つの名前にフルパスではなく、{"#c": "viewCount"} を使った SET stats.#c = :v
  4. パスが有効だと仮定する前に、GetItem属性の存在 / スペル + 大文字小文字を検証します
  5. 親マップが欠落したネストされた子を書き込みますか? それは兄弟エラーです。親を作成する2ステップのパターンは the document path provided in the update expression is invalid for update を参照してください。

更新を書きながらアイテムの実際の形状を目の前に置きたいですか?DynoTable デスクトップアプリ はすべての属性(ネストされたマップやリストを含む)を表示するため、欠落した親パスが一目瞭然です。

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。