You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS DynamoDB UpdateItem报ValidationException:键元素与Schema不匹配

问题解决:DynamoDB UpdateCommand 键不匹配报错

核心原因

你使用的是DynamoDBDocumentClient(文档客户端),但却用了低级API的格式来定义键和属性值(比如{S: 'xxx'}、{N: 'xxx'})。文档客户端会自动处理JS类型和DynamoDB类型的映射,手动加类型标记会导致键被识别为嵌套对象,和表的主键类型不匹配,从而触发ValidationException。

修正后的代码

把Key和ExpressionAttributeValues改成原生JS类型即可:

const dynamoDB = DynamoDBDocumentClient.from(dynamoDBClient)
const result = await dynamoDB.send(new UpdateCommand({
  TableName: 'chat_messages_tbl',
  Key: { 
    user_id: 'user123', 
    created_at: 1681218896790  // 直接传数字,不用N标记
  },
  UpdateExpression: 'SET bot_answer = :bot_answer',
  ExpressionAttributeValues: { ':bot_answer': 'Hello from bot!' },  // 直接传字符串
  ReturnValues: 'UPDATED_NEW'
}))

从DynamoDB Stream事件中取值的正确方式

如果是从Stream事件里获取主键值,需要先把事件中的类型标记转换为原生类型,比如:

const record = event.Records[0];
const userId = record.dynamodb.NewImage.user_id.S;
const createdAt = parseInt(record.dynamodb.NewImage.created_at.N, 10);

// 然后用这两个原生值作为UpdateCommand的Key

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:04:55