我正在将aws-php-sdk与dynamoDB一起使用,以存储一组唯一的键数值。 我希望能够将新值添加到集合中-使用列表很容易实现,但是这也会导致重复的值,因此我宁愿使用集合。 由于dynamoDB的收费方式,我不需要读取所有值,插入唯一值并写回整个设置,因为在横向扩展时这会非常昂贵。文件似乎建议可以将数字附加到数字集上,但在使其生效方面并没有太大帮助。
$UpdateExpression = "
SET #subscribers = list_append(if_not_exists(#subscribers,:empty_list),:subscriber)
";
//如果该值已经存在,则此条件应该匹配。
$ConditionExpression = "not contains (#subscribers,:subscriberStr)";
$ExpressionAttributeNames = [
"#subscribers" => "subscribers"
];
$ExpressionAttributeValues = $marshaler->marshalJson('
{
":subscriber": ['.$subscriber.'],":empty_list": [],":subscriberStr": "'.$subscriber.'"
}
');
$tableName = 'publisherRelationships';
$key = $marshaler->marshalJson('
{
"publisher": '.$publisher.'
}
');
$params = [
'TableName' => $tableName,'Key' => $key,'UpdateExpression' => $UpdateExpression,'ConditionExpression' => $ConditionExpression,'ExpressionAttributeNames' => $ExpressionAttributeNames,'ExpressionAttributeValues' => $ExpressionAttributeValues
];
$result = $client->updateItem($params);