将 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。
我正在尝试使用 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。