使用主键和两个排序键条件查询表格

9
我想使用分区键和排序键查询DynamoDB表。排序键是Unix日期,因此我希望请求在排序键上这两个日期之间的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: 无效的KeyConditionExpression:操作符或函数的错误操作数类型;操作符或函数:BETWEEN,操作数类型:NULL


错误信息准确吗?即 fromDateDec 或 toDateDec 是否具有 NULL 值? - Nadav Har'El
是的,toDate应该是int64而不是十进制数...我错误地阅读了错误消息,认为错误出在我使用between函数上。 - rlou
1个回答

0

首先,您需要使用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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接