不确定这里发生了什么,我按照文档,我得到错误,所以也许我的表定义错了?
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
答案 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 );
现在我的原始查询有效!