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
相关产品推荐
相关产品推荐

