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

DynamoDB中用于查询的复合主键

张积厚
2023-03-14

根据此链接:

DynamoDB上支持的操作

“只能查询具有复合主键(分区键和排序键)的表。”

但这似乎并不正确。我在DynamoDB中有一个名为“users”的表,该表的主键只包含一个属性“username”。

而且我能够在NodeJS中仅使用“username”属性上的“KeyConditionExpression”查询该表。请参见以下内容:

var getUserByUsername = function (username, callback) {
var dynamodbDoc = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "users",
    KeyConditionExpression: "username = :username",
    ExpressionAttributeValues: {
        ":username": username
    }
};

dynamodbDoc.query(params, function (err, data) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        callback(err, null);
    } else {
        console.log("DynamoDB Query succeeded.");
        callback(null, data);
    }
});

}

这段代码运行得很好。所以我想知道文档是否有误,或者我是否遗漏了什么?

共有1个答案

邢硕
2023-03-14

文档是正确的。

"分区键和排序键-一个复合主键,由两个属性组成。第一个属性是分区键,第二个属性是排序键。DynamoDB使用分区键值作为内部哈希函数的输入"

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html

如果表没有排序键(range属性),则复合键仅从哈希键构建。其结果之一是,项目不会按您喜欢的方式排序(项目按排序键排序)

 类似资料:
  • 在我的DynamoDB表中,有HashKey=ID和GSI=Type。我需要获取特定类型(GSI)的所有hashKeys(ID)。 在这种情况下,获取给定类型的所有ID的有效方法是什么?我的DynamoDB表不会很大。

  • 我有一个名为“弗兰克”的DynamoDB表,只有一个GSI。分区键称为PK,排序键称为SK,GSI分区键称为GSI1_PKGSI排序键称为GSI1_SK。我有一个存储实际数据的“数据”映射。 GSI分区键和排序键直接映射到表中具有相同名称的属性。 我可以运行partiql查询来获取图像中显示的结果。以下是PartIQ代码: 注意分区代码是如何多次引用“GSI1_SK”的。分区查询有效,并返回图像中

  • 问题内容: 我有以下课程: 当我初始化Spring Data JPA时,出现错误: 问题: Spring Data JPA是否不支持对主键的子集进行查询? 还是我需要为此实现自定义存储库方法? 问题答案: 好的,我还尝试使用以下方法执行此操作: 这确实给了我一个不同的错误消息a ,这向我暗示Spring Data JPA无法为构建查询。我改为对该查询方法进行了自定义实现: …而且, 它起作用了!

  • 我对DynamoDB非常陌生(一般没有Sql),在理解如何形成一个简单的查询时遇到了一些困难。。 我想在SQL中执行一个简单的选择,但似乎无法完成。 我的表定义基本上是: 表名snsNotiations主分区密钥接收者ID(编号) 它遵循一些属性(如readAt)。 我要执行的查询是: 我甚至可以在AWS UI上执行此查询:截图 我的lambda函数使用以下内容: 但我得到以下错误: 无法查询。错

  • Firestore文档称: 使用子句进行查询。在这种情况下,应该将查询拆分为大于查询和小于查询。例如,尽管不支持查询子句,但可以通过组合两个查询获得相同的结果集,一个查询使用子句,另一个使用子句。 我需要抓住用户在一定的年龄范围,所以这似乎是一个伟大的方式来抓住相关的,但不幸的是,我显然不明白如何使用这一点。 这不起作用,当我使用时,我会得到错误。 更新:显然他们没有专门的SWIFT文档。 我得到

  • 问题内容: 给定具有复合主键的表,是否存在用于编写查询的合法语法,例如: 如果这是不可能的,并且您无法修改架构,那么如何执行上述等效操作? 我还将在此处使用术语“复合主键”,“子选择”,“子选择”和“子查询”,以表示这些别名的搜索结果。 编辑 :我对标准SQL的答案以及将与PostgreSQL和SQLite 3一起使用的答案感兴趣。 问题答案: 更换你的。 或创建您的临时表并用它代替..