我在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”标签的代码最终可以正常工作。