提供的关键元素与 DynamoDB 中的架构错误不匹配

provided key element does not match the schema error in DynamoDB

当我尝试从 DynamoDb 获取数据时,出现 ValidationException:提供的关键元素与模式不匹配 错误。

getUser 和 validateUsername 的情况都不起作用,我尝试了很多方法来解决它,但似乎没有任何效果。我的 lambda 正在节点 14.x.

上工作

这是我的 lambda 代码:

// GET USER BY ID
async function getUser(userId) {
    const params = {
        TableName: DYNAMO_DB_TABLE_NAME,
        Key: {
            'id': {S: userId}
        }
    };
    return await DYNAMO_DB.get(params).promise()
    .then((response) => {
        console.log(response);
        return generateUserResponse(response?.Item, true);
    }, (error) => {
        console.error(error);
        return generateUserResponse(null, false);
    })
} 

// GET USER BY USERNAME
async function validateUsername(username) {
    console.log(username)
    const params = {
        TableName: DYNAMO_DB_TABLE_NAME,
        Key: {
            'id': username.toLowerCase()
        }
    };
    console.log(params);
    return await DYNAMO_DB.get(params).promise()
    .then((response) => {
        if (response && response?.Item) {
            return generateUserResponse(true, true);
        } else {
            return generateUserResponse(false, true);
        }
    }, (error) => {
        console.error(error);
        return generateUserResponse(null, false);
    })
}

如果您的 table 有排序键,您需要在 get 请求中同时传递分区键和排序键。

如果只想获取只有partition key的所有item,使用dynamodb的query操作

dynamoDocumentDb.get({
        TableName: DYNAMO_DB_TABLE_NAME,
        Key: {
            'pk': userId,
            'sk': '<sk value>'
        }
})