当前位置: 首页 > 知识库问答 >
问题:

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

陈哲
2023-03-14

嗨,Dynamodb社区,

因此,所讨论的表是MLA_USER_AUTH。正如您所看到的,它有As分区键和As排序键。我希望能够使用用户id和电子邮件查询数据库。

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

这是我目前的查询。这显然行不通。当它抛出错误时:ValidationExc0019:查询条件错过了关键架构元素: UserID

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

你是我唯一的选择。谢谢你的帮助

谢谢,忍者

共有3个答案

孟海
2023-03-14

没有分区键,您不能查询,但可以扫描。http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html#GettingStarted.NodeJs.04.Scan

方宏富
2023-03-14

正如Mark B所说,您需要分区键来查询——您不能单独使用排序键。

因此,您唯一的解决方法是创建一个GSI,将email作为分区键。

舒永嘉
2023-03-14

二级索引将满足您的需要。

// 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 有关创建它们的详细信息。

 类似资料:
  • 问题内容: 假设表格具有名称,ID,年龄,性别,学历等。ID是关键,并且该表也按名称,年龄和性别进行索引。我需要所有25岁以上的男学生,按其姓名排序。 这在mySQL中很简单: IndexDB允许创建索引并根据该索引对查询进行排序。但是它不允许多个查询,例如年龄和性别。我发现了一个名为queryIndexedDB的小型库,该库允许复合查询,但不提供排序结果。 那么,在使用IndexedDB时,有没

  • 我试图查询具有分区键和排序键的表(但是分区键和排序键是1:1,我只想使用分区键[仅返回一项]进行查询)。 这是我尝试过的代码,但没有成功(testId是分区键名,1234567890是字符串形式的分区键值);你们都知道我可以只使用分区键进行查询的方法吗?记住,由于分区键和排序键是1:1,所以只会返回一个项?提前非常感谢您。[这是我的第一篇堆栈溢出帖子-很抱歉,如果我用词不当,我很乐意回答关于我的措

  • 我做了一些挖掘,似乎在任何地方都找不到简单的答案,也许我找错了地方。我只想按文件的修改时间排序,从最旧到最新。这可能吗?

  • 问题内容: 如果排序列上有索引,排序是否使用mysql索引?索引还用于其他什么用途? 它对列的组合索引和单独索引有什么区别? 问题答案: 是的,当按排序列排序时,MySQL使用索引对信息进行排序。 另外,如果在添加到 SELECT 子句的所有列中都有索引,则MySQL不会从表本身加载数据,而是从索引加载数据(更快)。 合并和单独的索引之间的区别是,MySQL不能使用超过 一个 每次查询索引,因此,

  • 适应DynamoDB:) 如果我有一个具有唯一分区键(如唯一id)的表,并且我使用时间戳作为排序键,那么Dynamo将如何对我的数据进行排序? 我将在一个分区中拥有最新的东西,而在其他分区中拥有旧的东西吗? 我这样问是因为我想知道如何分配吞吐量,而且我确信我最近创建和编辑的项目最有可能被访问,而旧的内容几乎可以存档。

  • 在Hazelcast中,是否可以基于键的属性而不是值来查询IMap?所有Hazelcast示例都显示了按值查询。E、 例如,对于具有字符串键的员工地图: 然后,典型的搜索谓词根据员工属性(姓名、薪资等)进行搜索。但我的案例使用了更复杂的密钥,例如: 因此,如果数据属性具有以下字段: 我想编写一个可以通过键进行查询的谓词,以返回适当的DataValue对象。这不起作用: 我可以按照这个答案中的建议推