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

查询具有主键和排序键上的两个条件的表

戴靖
2023-03-14

我正在尝试使用分区键和排序键查询Dynamodb表。排序键是unix日期,因此我想在排序中请求这2个日期之间的x分区键。我目前可以通过表扫描来实现这一点,但为了提高速度,我必须将其移至查询。我在网上找不到人们使用分区键和排序键查询他们的表的任何像样的例子。

我仔细阅读了这篇文章https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#DynamoDB.Query并了解我的参数必须在KeyConditionExpression中。

我已经通读了https://github.com/aws/aws-sdk-go/blob/master/service/dynamodb/expression/examples_test.go并从整体上理解它。但我就是找不到KeyConditionExpression的语法

我以为是这样的:

keyCond := expression.Key("accountId").
    Equal(expression.Value(accountId)).
    And(expression.Key("sortKey").
    Between(expression.Value(fromDateDec), expression.Value(toDateDec)))

但这会引发:

ValidationException:无效的关键条件表达式:运算符或函数的操作数类型不正确;运算符或函数:BETWEEN,操作数类型:NULL

共有1个答案

弘和同
2023-03-14

首先,您需要KeyAnd来组合散列键和排序键条件。

// keyCondition represents the key condition where the partition key
// "TeamName" is equal to value "Wildcats" and sort key "Number" is equal
// to value 1
keyCondition := expression.KeyAnd(expression.Key("TeamName").Equal(expression.Value("Wildcats")), expression.Key("Number").Equal(expression.Value(1)))

现在可以用如下中间条件替换相等条件

// keyCondition represents the boolean key condition of whether the value
// of the key "foo" is between values 5 and 10
keyCondition := expression.KeyBetween(expression.Key("foo"), expression.Value(5), expression.Value(10))
 类似资料:
  • 我正在阅读大约1个oracle伪目录,即ROWNUM:它的返回编号指示oracle返回行的顺序。 我在这里遇到了一些行为, 示例1。创建脚本: 2插入脚本: 从客户中选择*;按照上述插入的相同顺序执行, 在这里,如果我运行选择查询, 我得到以下输出: 这里ID=2首先插入,但oracle返回第二行, 但是,如果您包含具有ROWNUM和PK的表中的任何其他列,例如 我得到了正确的输出(正确的插入顺序

  • 我有一个DynamoDB表,其中包含主键:userID、排序键:sesionID和另一列,该列名为示例ID。 我想返回一个列表,该列表返回所有包含我发送的userID和examID的记录。这是我的代码: 这就是我得到的错误:{“statusCode”:500,“body”:“{”error“:“查询条件缺少关键架构元素:sessionId”}”, ... 我想也许我应该包括一个过滤器表达式,或者不

  • 问题内容: 我正在尝试更新具有两个主键的Model。 模型 移民 这是应该更新库存模型的代码,但不是。 我收到此错误: 我也尝试使用updateOrCreate()方法。它不起作用(我得到同样的错误)。 谁能告诉我们应该如何更新带有两个主键的Model? 问题答案: 我已经遇到过几次这个问题。您需要覆盖一些属性: 和方法(功劳): 请记住,此代码需要引用Eloquent Builder类, 我建议

  • 问题内容: 表是由其主键本质上排序的吗?如果我有一个在BigInt标识列上具有主键的表,我可以相信查询将始终返回按键排序的数据,还是我明确需要添加“ ORDER BY”。性能差异很大。 问题答案: 数据通过聚簇索引进行物理存储,聚簇索引通常是主键,但不一定是主键。 如果没有ORDER BY子句,则不能保证SQL中的数据具有顺序。当您需要按特定顺序排列数据时,应始终指定ORDER BY子句。如果表已

  • 问题内容: 我正在尝试使用JPA / Hibernate设置以下表: 可能有很多用户,每个用户最多只能有一个验证码,也可能没有。 这是我的课程: 我创建一个用户,然后尝试使用以下代码添加验证代码: 当我尝试运行它时,我收到org.hibernate.PersistentObjectException:分离的实体传递给持久化:用户 我还尝试在Validation类中使用以下代码: 当我创建验证码时,

  • 在他们的留档中,AWS提到了用于查询的关键条件表达式: 该条件可以选择对单个排序键值执行多个比较测试之一。这允许Query检索具有给定分区键值和排序键值的一个项目,或具有相同分区键值但不同排序键值的多个项目。 但是,我无法使其正常工作,例如,生成类似以下内容的内容:pk=:pk AND(begins\u with(sk,:foo)或begins\u with(sk,:bar))我得到了错误