DynamoDB 列表数据类型问题

Rom*_*aza 1 amazon-web-services amazon-dynamodb aws-php-sdk

根据此文档,DynamoDB 支持映射 (M) 和列表 (L) 类型,但是当我尝试创建具有 (L) 类型的表时,出现错误:

ValidationException(客户端):检测到 1 个验证错误:“attributeDefinitions.2.member.attributeType”处的值“L”未能满足约束:成员必须满足枚举值集:[B、N、S]

ThreadReplyIds属性添加到表信息后会发生这种情况:

[
    'AttributeDefinitions' => [
        [
            'AttributeName' => 'UserId',
            'AttributeType' => 'N',
        ],
        [
            'AttributeName' => 'ThreadReplyIds', // <<---
            'AttributeType' => 'L',
        ],
        [
            'AttributeName' => 'Title',
            'AttributeType' => 'S',
        ],
    ],
    'KeySchema' => [
        [
            'AttributeName' => 'UserId',
            'KeyType' => 'HASH',
        ],
        [
            'AttributeName' => 'Title',
            'KeyType' => 'RANGE',
        ],
    ],
    'ProvisionedThroughput' => [
        'ReadCapacityUnits' => 5,
        'WriteCapacityUnits' => 5,
    ],
    'TableName' => 'Thread',
]
Run Code Online (Sandbox Code Playgroud)

我的目标是存储一个列表或一组整数值ThreadReplyIds。我究竟做错了什么?

Tim*_*ein 5

起初,我认为这可能是您使用的 SDK 版本。但是在阅读了一些文档之后,似乎在创建表时,任何 AttributeDefinition 的 AttributeType 只能是 'S|N|B' 之一(意思是 'String'、'Number' 或 'Binary')。参考:PHP SDK DynamoDB AttributeDefinition

这是有道理的,因为无论如何您都不能在 KeySchema 中使用 List。因此,在创建表时无需为您的列表定义属性。在创建表后在表中放置或更新项目时,您始终可以将此属性添加到您想要的任何数据中。请参阅此处:PHP SDK DynamoDB PutItem