DynamoDB按主键查询报错:提供的键元素与schema不匹配
问题分析与解决
嘿,这个问题我之前也碰到过,核心原因是你查询时指定的主键名称和DynamoDB表实际定义的主键完全不匹配,所以才会抛出那个ValidationException: The provided key element does not match the schema异常。
从你的表结构来看,表的分区键是CallSid,但你在代码里却错误地用了"Id"作为Key的属性名:
// 这里的问题:用了不存在的主键名Id let params = { TableName: process.env.CALL_NAVEGATION_HISTORY_TABLE, Key: { "Id": requestBody.CallSid } }
DynamoDB对主键的匹配要求非常严格——属性名称必须和表定义的主键(分区键/排序键)完全一致,连大小写都不能错。
修正后的代码
只需要把Key里的"Id"改成表实际的主键名"CallSid"就行:
let params = { TableName: process.env.CALL_NAVEGATION_HISTORY_TABLE, Key: { "CallSid": requestBody.CallSid } // 这里替换成正确的主键名 } dynamoDb.get(params, function(err, data) { if(err){ console.log('Error on dynamodb', err); callback(null, Helpers.xmlTwimlResponse(twiml)); } console.log(data); callback(null, Helpers.xmlTwimlResponse(twiml)); });
额外提一句:如果你的表后续加了排序键,那用get方法时必须同时提供分区键和排序键的值;不过看你的表结构应该只有CallSid这一个主键,所以上面的修改应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者user866364
相关产品推荐
相关产品推荐

