如何在dynamodb中使用GSI?

时间:2017-11-19 22:18:11

标签: amazon-web-services amazon-dynamodb

我正在使用AWS控制台和NodeJS。

我有用户的dynamodb表,其中包含分区键(user_id)和排序键(company_id)以及其他属性。

我的一个属性是用户的电子邮件。电子邮件是唯一属性。

我需要通过电子邮件获取user_id,但我还没有他的user_id和company_id。

我认为我应该使用全球二级指数。

我点击了users表,打开了Indexes选项卡并为该表创建了GSI。 (name:email,type:GSI,Partition Key:email string,attributes:user_id)

我正在使用来自documentClient的方法Query。这是我的有效载荷:

payload = {
    "TableName": "users",
    "IndexName": "email",
    "KeyConditionExpression": "#index = :index_value",
    "ExpressionAttributeNames":{
        "#index": "email"
    },
    "ExpressionAttributeValues": {
        ":index_value": {"S": "test@gmail.com"}
    },
    "ProjectionExpression": "user_id",
        "ScanIndexForward": false
    };
}

这是我在CloudWatch中的错误:

  

" errorMessage":"一个或多个参数值无效:条件参数类型与模式类型不匹配"

1 个答案:

答案 0 :(得分:0)

我在写这个问题时找到了解决方案。 因此,当我使用documentClient时,我的有效负载应该如下所示

payload = {
    "TableName": "users",
    "IndexName": "email",
    "KeyConditionExpression": "#index = :index_value",
    "ExpressionAttributeNames":{
        "#index": "email"
    },
    "ExpressionAttributeValues": {
        ":index_value": "test@gmail.com" // <----------------
    },
    "ProjectionExpression": "user_id",
        "ScanIndexForward": false
    };
}

希望对某人有帮助