AWS Dynamodb:是否可以仅使用排序键进行查询

时间:2016-06-03 14:35:56

标签: node.js amazon-web-services amazon-dynamodb nosql

enter image description here

Hi dynamodb社区,

所以有问题的表是MLA_USER_AUTH。如您所见,它具有分区键和排序键。我希望能够使用user_id和email查询数据库。

有时我需要找到与电子邮件关联的用户,有时还需要找到用户ID。电子邮件和用户标识属性对于每个访问者都是唯一的。有什么方法可以做到吗?

这是我当前的查询。这显然不起作用。因为它抛出错误:ValidationException:查询条件错过了关键架构元素:UserID

var params = {
        TableName : 'MLA_USER_AUTH',
        KeyConditionExpression: "Email = :email",
        ExpressionAttributeValues:{
            ":email": { "S" : email } 
        }
    };
    dynamodb.query(params, function(err, data) { 

GSI是我唯一的选择吗?任何帮助表示赞赏

谢谢, Ninjasoar

3 个答案:

答案 0 :(得分:9)

二级索引确实需要你。

// definition
{
    TableName: "MLA_USER_AUTH",
    AttributeDefinitions:[
    {
        AttributeName: "Email",
        AttributeType: "S"
    }
    ],
    GlobalSecondaryIndexUpdates: [
    {
        Create: {
            IndexName: "emailIndex",
            KeySchema: [
                {AttributeName: "Email", KeyType: "HASH"}
            ]
        }
    }
    ]
}

// Query
{
    TableName : "MLA_USER_AUTH",
    IndexName: "emailIndex",
    KeyConditionExpression: "Email = :email",
    ExpressionAttributeValues:{
        ":email": { "S" : email } 
    }
}

有关创建它们的详细信息,请参阅http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.JsShell.06.html

答案 1 :(得分:4)

正如Mark B所说,你需要分区密钥query - 你不能单独使用sort-key。

因此,唯一的出路是创建一个以email作为分区键的GSI。

答案 2 :(得分:0)