DynamoDB出现「提供的键元素与架构不匹配」错误的其他触发原因有哪些
DynamoDB
The provided key element does not match the schema 错误的其他触发场景 - 主键数据类型不匹配:DynamoDB对主键字段的类型有强校验要求,比如你表的
pk字段定义为数字(N)类型,但你代码中传入的payload.id是字符串/布尔值/Null等不匹配的类型,即使键名正确也会触发该错误。DocumentClient虽然会做基础的JS类型到DynamoDB类型的转换,但不会自动做跨类型的兼容转换。 - 主键属性名不匹配:DynamoDB的属性名是大小写敏感的,如果你表的分区键实际名称为
Id/PK等和代码中pk拼写、大小写不一致的名称,会被判定为键元素不匹配。 - 实际操作的表结构和预期不符:常见于多环境配置混淆的场景,比如你代码中指定的
MyTable在当前运行环境下的结构确实存在排序键,或者分区键名称/类型和你预期的单分区键pk结构不同,也会触发该错误。 - 传入的主键值无效:如果
payload.id为undefined/空字符串/Null等无效值,等同于你没有提供有效的分区键值,也会触发该错误。 - Key参数传入了多余的属性:如果你的
Key对象中除了pk之外还额外传入了表结构中不存在的排序键字段,多余的键元素也会被判定为和schema不匹配。
你可以先加一段参数校验逻辑提前规避无效参数的问题,示例如下:
const dynamodbDocClient = new AWS.DynamoDB.DocumentClient({ logger: console }); socket.on('my-event', async (payload) => { // 新增参数校验,提前拦截无效值 if (!payload || typeof payload.id !== 'string' || !payload.id.trim()) { throw new Error('payload中id参数非法,必须为非空字符串'); } await dynamodbDocClient.delete({ TableName: 'MyTable', Key: { pk: payload.id }, }).promise() })
如果还无法解决,可以先调用describeTable接口获取当前表的真实结构,对比主键的名称、类型是否和你的代码逻辑一致。
内容的提问来源于stack exchange,提问作者Azamat Abdullaev
相关产品推荐
相关产品推荐

