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 可以编辑列表和集合属性。

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

2026-07-28 通过 @aws-sdk/client-dynamodb 3.1095.0 针对 DynamoDB Local 3.3.0 实测并复现——上方的元素个数、嵌套边界、集合往返与错误字符串都是引擎输出,不是估算。错误字符串的措辞在实时服务上可能不同。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。