DynamoDB:是什么导致错误“提供的关键元素与架构不匹配”?

Aza*_*aev 2 amazon-web-services nosql amazon-dynamodb

调用 DynamoDB deleteItem API 时,出现The provided key element does not match the schema错误。经过研究,我发现当您没有提供完整的主键(即表有范围键但 API 调用未指定它)时,就会发生此错误。但是,就我而言,该表没有范围键,它只有一个名为 的哈希键pk

这是我的代码:

const dynamodbDocClient = new AWS.DynamoDB.DocumentClient({ logger: console });
socket.on('my-event', async (payload) => {
   await dynamodbDocClient.delete({
      TableName: 'MyTable',
      Key: { pk: payload.id },
    }).promise()
})
Run Code Online (Sandbox Code Playgroud)

有人可以列出可能发生此错误的所有其他情况吗?

Luc*_*ens 5

在不知道您的数据库架构的情况下很难判断这一点,但一个可能的问题可能是您的主键在 DynamoDB 中定义为数字(例如整数或长整型),但payload.id属于字符串类型(反之亦然)。

您可以通过解析payload.id为 Javascripts 集成Number类型来解决这个问题。

Key: { pk: parseInt(payload.id) },
Run Code Online (Sandbox Code Playgroud)

相反,如果您的主键定义为字符串并且payload.id类型为Number

// Convert the id to string
Key: { pk: payload.id + '' },
Run Code Online (Sandbox Code Playgroud)