dynamodb使用javascript查询单行

时间:2018-04-16 17:55:41

标签: javascript amazon-dynamodb

不确定这里发生了什么,我按照文档,我得到错误,所以也许我的表定义错了?

function parseGET( data, callback )
{
    const params = 
    {
        TableName: data.TableName,
        Key: 
        {
            "workOrder": data.workOrder  // <--number, not a string
        }
    };

    dynamodb.get( params, ( error, data ) =>
    {
        if( error )
            console.log( 'table ERROR:', error );
    ...
    }
}

响应:“提供的关键元素与架构不匹配”

Response:
{
  "statusCode": 200,
  "body": "The provided key element does not match the schema",
  "headers": {
    "Content-Type": "application/json",
    "Access-Control-Allow-Origin": "*"
  }
}

如果我进行扫描,我会获得所有数据,但我只想获得一行。

dynamodb.scan( {"TableName": data.TableName}, ( error, data ) =>
...
data:
{
  "probeCount": "123",
  "rangeCal": "hight",
  "ESID": "1",
  "rangeNom": "1000",
  "nodeCount": "123",
  "password": "123",
  "cableLength": "456",
  "userId": "Onicon",
  "usePasswd": "disable",
  "elevation": "789",
  "workOrder": 789456,
  "rangeMax": "1150",
  "serialNumber": "3"
}
  ],
  "Count": 11,
  "ScannedCount": 11

单个行在控制台中工作,但我无法弄清楚如何通过JS来做同样的事情。

一些表格详情:

Table name  myTestTable
Primary partition key   workOrder (Number)
Primary sort key    -
Point-in-time recovery  DISABLEDEnable
Time to live attribute  DISABLEDManage TTL
Table status    Active
Creation date   March 22, 2018 at 1:45:09 PM UTC-7
UTC: March 22, 2018 at 8:45:09 PM UTC

Local: March 22, 2018 at 1:45:09 PM UTC-7

Region (N. California): March 22, 2018 at 12:45:09 PM UTC-8

2 个答案:

答案 0 :(得分:0)

您是否尝试过将密钥的定义更改为......

Key: 
  {
    "workOrder": {"N", data.workOrder}  // <--number, not a string
  }

您可能需要使用

data.workOrder.toString()

定义密钥时。

答案 1 :(得分:0)

感谢那些帮助过的人。 最终结果是我有点困惑(像往常一样)。 data.workOrder是一个数字的字符串,例如。 JSON中的"654",而不是654。 所以简单的解决方案是将其转换为实际数字:

data.workOrder = parseInt( data.workOrder, 10 );

现在我的原始查询有效!