我在DynamoDB中创建了一个表'user_info',该表具有一个主哈希键'user_id'(String),没有范围键。然后,我创建了2个AWS lambda函数来插入和查询项目。我可以在表中插入项目,但是当我查询表时,它返回:


ValidationException:提供的键元素与
模式。


我的查询功能:

var params = {
   Key: {
       user_id:{
           S: "[email protected]"
       }
   },
    TableName: 'user_info',
    ProjectionExpression: 'password'
};

dynamodb.getItem(params,
 function(err, data) {
    if (err) {
        console.log("get item err." + err);
        context.done('error','getting item from dynamodb failed: '+err);
    }
    else {
        console.log('great success: '+JSON.stringify(data, null, '  '));
        context.succeed('created user ' + event.user_id + ' successfully.');
    }
});


我不断收到此异常:

ValidationException: The provided key element does not match the schema


以来

1)我只有一个哈希主键。

2)user_id被定义为String。我真的不知道为什么会出现不匹配错误。

最佳答案

为了进一步说明这种情况的发生原因,您最初使用的是DynamoDB Document Client,它不需要将属性显式标记为“字符串”(S)或“数字”(N)等。因此,您的原始代码将具有与...合作

var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();

var params = {
Key: {
   user_id: "[email protected]"
},
TableName: 'user_info',
ProjectionExpression: 'password'
};


注意,包裹“ user_id”值的“ S”已从上述代码中删除。稍后,您通过使用“ aws-sdk”切换回低级javascript sdk,因此带有“ S”标签的代码最终可以正常工作。

07-26 08:52