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
答案 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)