【问题标题】:Incorrect sort key when querying from DynamoDB (node js)从 DynamoDB(节点 js)查询时排序键不正确
【发布时间】:2018-06-25 05:43:38
【问题描述】:

我正在使用 AWS dynamodb 来存储一些数据。该表将“key”作为“主分区键”,将“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)?

提前谢谢你。

【问题讨论】:

    标签: node.js amazon-dynamodb


    【解决方案1】:

    您可以在发送之前转换为字符串类型,如文档所述。使用 .toFixed() 可以保持所需的精度。

    来自AWS Docs

    数字

    数字可以是正数、负数或零。数字可以有 到 38 位精度。超过这个会导致异常。

    正值范围:1E-130 到 9.9999999999999999999999999999999999999E+125

    负值范围:-9.99999999999999999999999999999999999999E+125 到 -1E-130

    在 DynamoDB 中,数字表示为可变长度。领导和 尾随零被修剪。

    所有数字都以字符串形式通过网络发送到 DynamoDB,以 最大限度地提高跨语言和库的兼容性。然而, DynamoDB 将它们视为数学的数字类型属性 操作。

    注意

    如果数字精度很重要,您应该将数字传递给 DynamoDB 使用从数字类型转换而来的字符串。

    【讨论】:

    • 感谢您的建议。但是我已经在表中存储了很多数据,所以我无法将表中的数据类型从数字更改为字符串。
    【解决方案2】:

    由于问题是由 javascript 引起的(js 有限制数字长度和小数位),我转向 PHP 并改用 AWS SDK for PHP。现在可以了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多