根据这个doc,DynamoDB支持map(M)和list(L)类型,但是当我尝试创建一个(L)类型的表时,我收到错误:
ValidationException(client):检测到1个验证错误:值' L' at' attributeDefinitions.2.member.attributeType'无法满足约束:成员必须满足枚举值集:[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',
]
我的目标是为ThreadReplyIds
存储一个列表或一组整数值。
我做错了什么?
答案 0 :(得分:1)
起初,我认为它可能是您正在使用的SDK版本。但是在阅读了一些文档之后,似乎在创建表时,任何AttributeDefinition的AttributeType只能是'S | N | B'之一(意思是'String','Number'或'Binary')。参考:PHP SDK DynamoDB AttributeDefinition。
这是有道理的,因为无论如何都不能在KeySchema中使用List。因此,在创建表时无需为List定义属性。在创建表后,在表中放置或更新项时,您始终可以将此属性添加到所需的任何数据中。见这里:PHP SDK DynamoDB PutItem