DynamoDB 項目層級動作:GetItem、PutItem、UpdateItem、DeleteItem
DynamoDB 的 API 分成三大類:以單一項目的主鍵進行操作的項目層級動作、在單一
partition 內讀取一段範圍的 Query,以及讀取所有內容的 Scan。本指南介紹第一類
— 你最常用的四個操作:GetItem、PutItem、UpdateItem、DeleteItem。它們是
DynamoDB 提供的最便宜、最快速的呼叫,而正確掌握它們之間的差異(尤其是 Put 與
Update)能避免一整類意外資料遺失的 bug。
什麼是 DynamoDB 的項目層級操作?
DynamoDB 的項目層級操作,是以完整主鍵對單一項目進行操作的四個呼叫:GetItem 讀取項目、PutItem 建立或完全取代項目、UpdateItem 就地修改特定屬性,而 DeleteItem 移除項目。每一個都精確地處理剛好一個項目,使它們成為最快速、最便宜的呼叫 — 不像 Query 與 Scan 會讀取許多項目。
GetItem— 以完整主鍵讀取一個項目。PutItem— 建立或完全取代一個項目。UpdateItem— 建立或就地修改一個項目的特定屬性。DeleteItem— 以完整主鍵移除一個項目。- 這四者都需要完整的主鍵(partition key,若表格有 sort key 則還需 sort key) — 它們精確地定位剛好一個項目。
PutItem會覆寫整個項目;UpdateItem則是外科手術式的 — 把兩者搞混,正是屬性 默默消失的原因。
決定性特徵:一個項目、完整的鍵
每個項目層級動作都以完整主鍵鎖定單一項目。這正是它們又快又便宜的原因 — DynamoDB 對 partition key 做雜湊,直接找到該項目,完成。沒有篩選、沒有掃描。如果你不 知道完整的鍵,這些就不是對的工具;那是 Query 與 Scan 的用武 之地。
假設你以 USER#<id> 為鍵管理使用者帳戶:
PK: USER#204 email, displayName, plan, createdAt- 對
USER#204執行GetItem→ 直接取得那位使用者。 - 對
USER#204執行DeleteItem→ 移除那位使用者。
兩者都需要確切的鍵。沒有鍵,就沒有項目層級動作。
PutItem 與 UpdateItem — 會咬人的那一個
這是值得內化的差異:
PutItem寫入整個項目。 如果USER#204已存在,而你只用{email, displayName}執行PutItem,現有的plan與createdAt屬性就沒了 — put 會取代整個項目, 而非合併。UpdateItem只改你指名的部分。 帶有SET email = …的UpdateItem會保留其他所有 屬性原封不動,而且若項目不存在還會建立它(一種 upsert)。
經驗法則:要更改既有項目就用 UpdateItem,而 PutItem 只在你真的是指「把這個項目
寫成完整的新狀態」時才使用。PutItem 與 UpdateItem 都接受一個
condition expression,因此你可以讓寫入帶條件
(「只有在它尚不存在時」)。
DynoTable 中的項目層級動作
想看這些操作背後的原始 API 呼叫嗎?在 DynamoDB 表達式建構器中組裝表達式與帶類型的值映射, 並用 DynamoDB JSON 轉換器把純 JSON 項目轉換成 API 的帶類型格式。
在 DynoTable 中,同樣的工作變成了視覺化:在格線中開啟一個項目以讀取它(一次 GetItem)、
編輯屬性並提交(一次 UpdateItem)、新增或取代一列(一次 PutItem),或刪除一個——
每次操作一個項目。

陷阱與後續步驟
PutItem會取代整個項目 — 若要更改少數欄位而不遺失其餘部分,請使用UpdateItem。- 你必須知道完整的主鍵 — 沒有鍵就代表要用 Query/Scan,而非項目層級動作。
- 一次要處理很多項目嗎? 別一個一個地迴圈呼叫這些 — 批次操作能把它們合併成更少的往返。
- 需要拿回舊值/新值嗎? 設定
ReturnValues, 而非另外接一次GetItem。 - 相關: query 與 scan 的比較涵蓋讀取多個項目的那一面。
想要不寫一行 API 程式碼就讀取、寫入並刪除項目嗎? 下載 DynoTable,直接操作你的表格。


