提供的键元素与架构不匹配-AWS

时间:2019-03-25 17:14:31

标签: amazon-web-services rest aws-lambda amazon-dynamodb aws-api-gateway

  

我在stackoverflow上看到了类似的问题,但答案无法解决我的问题

我已经在GET类型的API GETWAY中创建了一个资源。在我的查询字符串中,我传递了以下信息:

email=x@gmail.com

racf=XXXX&email=x@gmail.com

我收到此错误:

  

提供的key元素与架构不匹配

但是,如果我使用主键进行操作,它将起作用。

racf=XXXX

我已经在dynamoDB中为电子邮件属性创建了一个索引

LAMBDA功能:

case 'GET':
    if (event.queryStringParameters) {
      dynamo.getItem({ 
          TableName: "eventregistration-db",
          Key:{
            //"racf": event.queryStringParameters.racf,
            "email": event.queryStringParameters.email
          }
       },done);
   } else {
     dynamo.scan({ TableName: tableName }, done);  
  }               
 break;

1 个答案:

答案 0 :(得分:2)

似乎email不是DynamoDb表的Primary Key的一部分。

对于getItem,您必须使用组成表主键(分区键和可选的排序键)的表列。

scan不需要任何键,因为它可以在表上进行完全搜索-这就是在这种情况下它可以工作的原因。

email(和racf)设置为表的主键,使其可以使用。

如果要使用索引,则必须使用query

dynamo.query({
    TableName: tableName,
    IndexName: indexName,
    KeyConditionExpression: "email = :email",
    ExpressionAttributeValues: {
        ":email": event.queryStringParameters.email
    }
}, done);