我在其中一个DynamoDB表上设置了一个字符串。
此代码将新项添加到字符串集并且效果很好
$update = $client->updateItem ( array (
'TableName' => 'myTable',
'Key' => array (
'rep_num' => array (
'S' => $id_num
)
),
'ExpressionAttributeValues' => array (
':transaction_ids' => array(
'SS' => array($transaction_id)
)
),
'UpdateExpression' => 'ADD transaction_ids :transaction_ids'
));
我的问题是,它仅在项目上已存在密钥transaction_ids
时才有效。
如果现有项目不存在,如何更改此代码以创建密钥?
答案 0 :(得分:0)
如果该项目没有transaction_ids
,则应创建该属性并为其添加值。
如果项目具有属性transaction_ids
,只要新值的数据类型与现有的SS
属性数据类型匹配,它就应该为其添加值。
请参阅此link
如果现有数据类型是一个集合,如果Value也是一个集合,那么 值将附加到现有集。例如,如果属性 value是set [1,2],ADD动作指定[3],然后是 最终属性值为[1,2,3]。如果ADD操作是,则会发生错误 为set属性指定并指定的属性类型 与现有的集合类型不匹配。
两个集必须具有相同的原始数据类型。例如,如果 现有数据类型是一组字符串,Value也必须是一组 字符串。
我已使用JavaScript API进行过测试。它按预期工作。它也应该在PHP中工作。
示例代码: -
UpdateExpression : "ADD #transaction_ids :transaction_ids ",
ExpressionAttributeNames: {
'#transaction_ids' : 'transaction_ids',
},
ExpressionAttributeValues: {':transaction_ids' : docClient.createSet(["3"])},