DynamoDB 可以儲存陣列嗎?

可以。DynamoDB 使用 List(L)型別儲存陣列 — 那是一種保序的集合,可以裝混合型別,包含字串、數字、布林值、null、map 與巢狀 list。若要存放不重複值的無序集合,它也提供字串、數字與二進位 Set。只要項目維持在 400 KB 以下,就沒有元素數量的上限。

List(有序陣列)

List 會保留順序,並允許重複與混合型別。它直接對應到一個 JSON 陣列,而且可以巢狀(map 的 list、list 的 list),最深 32 層。

那個文件記載的上限把最底層的值也算進去。把一個字串包進 31 層巢狀的 L 容器寫得進去;第 32 個容器就會失敗,而同樣的界線也適用於巢狀的 M

ValidationException: Nesting Levels have exceeded supported limits:
Attributes in the item have nested levels beyond supported limit

Set(不重複的值)

  • Set 有三種:String Set(SS)、Number Set(NS)與 Binary Set(BS),裝的是單一型別、不重複、無序的值。
  • 一個 set 不能是空的(那會引發 ValidationException)。

當成員資格與唯一性要緊時用 Set;當順序或混合型別要緊時用 List。

Set 會重新排序並拒絕重複

["zulu", "alpha", "mike"] 存成一個 String Set,讀回來會是 ["alpha", "mike", "zulu"]。Number Set 則按數值排序:["30", "4", "100"] 會回傳 ["4", "30", "100"]。同樣那些值放進 List,回來時就是你寫進去的順序。

重複的成員是硬性失敗,而不是無聲去重:

ValidationException: Input collection contains duplicates

而且既然一個 set 永遠不能是空的,用 DELETE 移除它最後一個成員就會把整個屬性移掉。期待拿回一個空 set 的程式碼,得到的會是一個缺席的屬性,所以請用 attribute_exists 來測試,而不是測長度是否為零。

到底裝得下幾個元素

「沒有元素數量上限」是正確的,卻難以據以行動。可用的答案是 400 KB 除以一個元素的成本:一個 list 帶 3 位元組的額外負擔,接著是每個元素自身的大小再加 1 位元組。

對於一個單字元分割區索引鍵之下、36 字元的 UUID 字串,那個數字落在 11,070 個元素。加上第 11,071 個就會被拒絕:

ValidationException: Item size has exceeded the maximum allowed size

項目大小計算機把那兩個項目算成 409,599 與 409,636 位元組,所以它畫的 409,600 位元組那條線,和引擎畫的完全一致。寫入比較大的那一個要花 400 個寫入單位。

深入了解

請見 DynamoDB 資料型別,並用 JSON 轉換器轉換巢狀結構。下載 DynoTable 就能編輯 list 與 set 屬性。

參考資料

最後查證於 2026-07-13,對照上方連結的官方 AWS 文件。

已於 2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0 量測並重現 — 上方的元素數量、巢狀界線、set 的來回結果與錯誤字串皆為引擎輸出,不是估算。錯誤字串的措辭在線上服務上可能不同。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。