DynamoDB 能存数组吗?
可以。DynamoDB 用 List(L)类型来存数组——一种保序的集合,可以装混合类型,包括字符串、数字、布尔值、null、映射和嵌套列表。对于不重复值的无序集合,它还提供字符串、数字和二进制集合。只要项目保持在 400 KB 以内,元素个数没有上限。
列表(有序数组)
列表保留顺序,允许重复和混合类型。它直接对应一个 JSON 数组,并且可以嵌套(映射的列表、列表的列表),最深 32 层。
那个文档上的上限把最底层的值也算进去了。把一个字符串套进 31 层嵌套的 L 容器里能正常写入;第 32 层容器就失败了,而同样的边界也适用于嵌套的 M:
ValidationException: Nesting Levels have exceeded supported limits:
Attributes in the item have nested levels beyond supported limit集合(不重复的值)
- 字符串集合、数字集合、二进制集合(SS、NS、BS)装的是同一种类型的不重复值,无序。
- 集合不能为空(那会抛出
ValidationException)。
当成员关系和唯一性要紧时用集合;当顺序或混合类型要紧时用列表。
集合会重排顺序并拒绝重复
把 ["zulu", "alpha", "mike"] 存成一个字符串集合,读回来是 ["alpha", "mike", "zulu"]。数字集合按数值排序:["30", "4", "100"] 返回 ["4", "30", "100"]。同样这些值放在列表里,回来时就是你写进去的顺序。
重复的成员是一次硬失败,而不是悄悄去重:
ValidationException: Input collection contains duplicates而且既然集合永远不能为空,把它最后一个成员 DELETE 掉就会把这个属性一并移除。指望拿回一个空集合的代码,拿到的会是一个缺失的属性,所以要用 attribute_exists 来判断,而不是判断长度为零。
到底能装下多少个元素
"元素个数没有上限"是准确的,但很难据此行动。可操作的答案是 400 KB 除以单个元素的开销:一个列表自身有 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 可以编辑列表和集合属性。
参考资料
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。
2026-07-28 通过 @aws-sdk/client-dynamodb 3.1095.0 针对 DynamoDB Local 3.3.0 实测并复现——上方的元素个数、嵌套边界、集合往返与错误字符串都是引擎输出,不是估算。错误字符串的措辞在实时服务上可能不同。