将 DynamoDB 的 updateItem 与数值一起使用

Using DynamoDB's updateItem with a numeric value

我正在尝试使用 updateItem 作为 PHP AWS SDK 版本 3 的一部分更新 DynamoDB 中的记录。

我尝试更新的字段应该包含一个数值。

如果我运行这个代码我得到一个错误:

$params = array(
    'TableName' => $table,
    'Key' => array('id' => array('S' => $id) ),
    'UpdateExpression' => 'set newField = :val',
    'ExpressionAttributeValues' => array(
        ':val'  => array('N' => 99)
    ),
    'ReturnValues' => 'ALL_NEW'
);

print_r($params);

$result = $client->updateItem($params);

错误:

Client error: `POST https://dynamodb.eu-west-2.amazonaws.com` resulted in a `400 Bad Request` 
response: {"__type":"com.amazon.coral.service#SerializationException","Message":"NUMBER_VALUE cannot be converted to String"}

但是如果我修改:

':val'  => array('N' => 99)

成为:

':val'  => array('N' => "99")

':val'  => array('N' => (string)99)

然后请求成功,更新Dynamo。如果我转到 Dynamo 控制台,那么我可以看到更新的记录并且该字段正确显示为 Number 类型。

是否有更好的方法来处理使用整数更新 DynamoDB 记录的过程,转换为字符串,以便 PHP SDK 工作似乎不是最好的方法?

所有 DynamoDB SDK afaik 最初都希望将数值显示为字符串,但随后各种编组增强功能带来了原生类型支持。

我不使用 PHP,但请参阅 DynamoDB JSON and Array Marshaling for PHP