The provided expression refers to an attribute that does not exist in the item
TL;DR — 你的 UpdateExpression 讀取了一個不在項目上的屬性 — 一個算術運算元(SET score = score + :inc,而 score 從未設定)、從另一個屬性複製(SET a = b),或 list 運算元缺少的 list_append。以 if_not_exists 防護這個讀取,或在建立項目時種下該屬性。(寫入一條父層 map 缺少的巢狀路徑會拋出另一個 "document path invalid for update" 錯誤。)
這是什麼意思
ValidationException: The provided expression refers to an attribute
that does not exist in the item這是一個 HTTP 400 ValidationException。請求解析正常,但當 DynamoDB 對項目求值它時,你的 expression 讀取的一個屬性 — +/- 的運算元、SET a = b 複製的來源,或 list_append 引數 — 不在那裡,因此運算元無法解析。這是用戶端問題且不可重試:相同的項目 + expression 會重現它。
為什麼會發生
- 對未設定的屬性做算術 —
SET score = score + :inc在score從未初始化時拋出;文件的遞增/遞減語法對一個_既有的_數值屬性運作。 - 從缺少的屬性複製 — 當項目沒有
email時的SET backupEmail = email。 - 對缺少的 list 做
list_append— 當tags尚不存在時的SET tags = list_append(tags, :more)。 - 巢狀路徑的佔位符對應錯誤 — 將整條帶點路徑對應到一個
ExpressionAttributeNames項目("#p": "stats.viewCount"),而非只替換葉節點;DynamoDB 將字面上的"stats.viewCount"視為單一屬性名稱,它在 expression 讀取的那一刻就缺少了。 - 讀取屬性名稱有拼字或大小寫錯誤 — DynamoDB 屬性名稱區分大小寫。
如何修正
- 以
if_not_exists防護讀取,讓第一次寫入即使屬性尚不存在也能運作:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - 在建立項目時種下屬性 — 事先寫入
score: 0、tags: [],讓後續讀取總能解析。 - 在巢狀路徑中只替換葉節點 — 在 expression 中保持點為字面:
SET stats.#c = :v搭配{"#c": "viewCount"},而非將整條路徑放入一個名稱。 - 在假設路徑有效前,以
GetItem驗證屬性存在/拼字 + 大小寫。 - 正在寫入一個父層 map 缺少的巢狀子層? 那是相關的錯誤 — 參見 the document path provided in the update expression is invalid for update 的兩步驟建立父層模式。
想在撰寫更新時把項目的真實形狀擺在眼前?DynoTable 桌面應用程式顯示每個屬性(包括巢狀 map 與 list),因此缺少的父層路徑一眼可見。
相關錯誤
- The document path provided in the update expression is invalid for update — 寫入一條父層 map/list 缺少或型別錯誤的巢狀路徑。
- Invalid UpdateExpression 語法 — expression 本身格式不正確,在這項檢查之前就被攔下。
- Reserved keyword in attribute name — 名稱與保留字衝突。
- ExpressionAttributeValues invalid
- 學習:Update expressions · Expression names & values
參考資料
- 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 官方文件。