从DynamoDB(节点js)查询时,排序键不正确

时间:2018-06-25 05:43:39

标签: node.js amazon-dynamodb

我正在使用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)?

谢谢。

2 个答案:

答案 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。现在可以了!