The document path provided in the update expression is invalid for update
TL;DR — ネストされたパス(SET parent.child = :v)に書き込もうとしていますが、parent がアイテムに存在しない、あるいはマップやリストではなく文字列/数値として存在しています。DynamoDB は中間のマップを自動作成しません。まず親を作成し(先行する更新で SET #p = if_not_exists(#p, :emptyMap)、またはアイテム作成時に {} を初期化)、それからネスト属性を設定してください。
意味
ValidationException: The document path provided in the update expression
is invalid for update更新式は深いパス(stats.daily.views、items[3].qty)を指定できますが、パスの最後 以外 のすべてのステップは、互換性のある型ですでにアイテムに存在している必要があります。アイテムに stats 属性がない、あるいは stats が文字列である場合、daily をぶら下げる場所がなく、更新は拒否されます。同じチェックはトランザクション内でも実行され、そこでは ValidationError のキャンセル理由として現れます。
発生する理由
- 親のマップがまだ存在しない — アイテムが
statsなしで作成され、今SET stats.daily = :vに降りていくstatsがない。 - 親が誤った型で存在する —
statsがマップ(M)ではなく文字列や数値であるため、指定するメンバーがない。 - 存在しないリストへのインデックス指定 —
itemsがアイテムにない、またはリストでないのにSET items[0].qty = :q。 - パスセグメントのタイプミス —
SET stat.daily = :v(sが抜けている)が、存在しない属性に降りていく。 - アイテムごとに形状が異なる — マップを持つアイテムでは更新が動作し、持たないアイテムでは失敗する(混在エンティティのシングルテーブル設計でよくある)。
修正方法
アイテム作成時に親のマップを初期化します — 前もって
stats: {}(空のM)を書けば、ネストされた更新は常に着地する場所を持ちます。または必要に応じて親を作成し、それから子を設定します — 2つの更新。 DynamoDB は1つの式で両方を行わせません(それは パスの重複 です):
// update 1 — create the map only if it's missing UpdateExpression: 'SET #s = if_not_exists(#s, :empty)', ExpressionAttributeNames: {'#s': 'stats'}, ExpressionAttributeValues: {':empty': {}} // update 2 — now the nested set is safe UpdateExpression: 'SET #s.#d = :v', ExpressionAttributeNames: {'#s': 'stats', '#d': 'daily'}if_not_exists(stats.daily, :v)はここでは 役に立たない ことに注意してください。それは欠落した親ではなく 値 をガードします。マップ全体を置き換えます — その完全な形状を自分で持っている場合:
SET #s = :wholeMapはstatsが存在したかどうかに関わらず動作します。実際のアイテムの形状を検証します — アイテムを読み取り、パスが有効だと仮定する前に、親属性が存在して
M/Lであることを確認します。
DynoTable デスクトップアプリ は各アイテムの実際のネスト構造を一目で表示します。書き込む前に、stats がマップなのか、文字列なのか、まったく欠落しているのかを見ることができます。
関連するエラー
- Two document paths overlap with each other — 「親を作成 + 子を設定」が1つの式にできない理由。
- The provided expression refers to an attribute that does not exist
- Invalid UpdateExpression: Syntax error
- Learn: Update expressions · Data types
References
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。