我正在使用AWS dynamodb存储一些数据。该表具有“键”作为“主分区键”和“ create_micro_time_float”作为“主排序键”。
我表中的数据是这样的。
{
'key': {'S': 'xxx'},
'create_micro_time_float': {'N': 1499844782.50379992}
}, ...
但是当我使用“扫描”操作(检索表中的所有数据)时,我得到了类似的东西。
{
'key': {'S': 'xxx'},
'create_micro_time_float': {'N': 1499844782.5037999}
}, ...
“主排序键”的最后一个小数点丢失。
问题是我想更新表中的所有记录,但是现在我有一个错误的排序键。我需要正确的排序键才能更新表中的记录。
我该如何做(nodejs dynamodb aws sdk)?
谢谢。
答案 0 :(得分:0)
您可以先转换为String类型,然后再按文档所述发送。使用.toFixed()可以保持所需的精度。
来自AWS Docs
数字
数字可以为正,负或零。数字可以有 达到38位精度。超出此范围将导致异常。
正范围:1E-130至9.9999999999999999999999999999999999999E + 125
负范围:-9.9999999999999999999999999999999999999E + 125至 -1E-130
在DynamoDB中,数字表示为可变长度。领导和 尾随的零被修剪。
所有数字都作为字符串通过网络发送到DynamoDB, 最大化语言和库之间的兼容性。然而, DynamoDB将它们视为数学的数字类型属性 操作。
注意
如果数字精度很重要,则应将数字传递给DynamoDB 使用从数字类型转换的字符串。
答案 1 :(得分:0)
由于问题是由javascript引起的(js具有限制的数字长度和小数位),因此我移至PHP并改用AWS SDK for PHP。现在可以了!