DynamoDB - 查询范围键的最大值
DynamoDB - Querying for the greatest value of a range key
我有一个 DynamoDB table 具有以下结构
HK | RK | A1 | A2 | A3
(Hash Key) | (Range Key)
我有一个本地二级索引,其 范围键 是 A3。
我想找出一个特定的Hash key HK,属性A3的最大值是多少。所以我这样查询二级索引:
Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":v1", new AttributeValue().withS("hash value"));
queryExpression = new DynamoDBQueryExpression<Table>()
.withIndexName("index-name")
.withKeyConditionExpression("HK = :v1")
.withExpressionAttributeValues(eav)
.withScanIndexForward(false); //This will sort the result in descending order (w.r to range key)
queryExpression.setLimit(1);
myCollection = dynamoDBMapper.query(Table.class, queryExpression);
问题是它returns 所有具有指定哈希键的记录,按范围键(A3)反向排序。我想单独获得第一张唱片。 (给定 HK 的 A3 值最大的记录)。
我尝试使用 setLimit,但它不起作用。
我怎样才能做到这一点..
我用 queryPage
而不是 query
解决了这个问题
QueryResultPage<Lookup> res = dynamoDBMapper.queryPage(Table.class, queryExpression);
更多信息here
我有一个 DynamoDB table 具有以下结构
HK | RK | A1 | A2 | A3
(Hash Key) | (Range Key)
我有一个本地二级索引,其 范围键 是 A3。
我想找出一个特定的Hash key HK,属性A3的最大值是多少。所以我这样查询二级索引:
Map<String, AttributeValue> eav = new HashMap<>();
eav.put(":v1", new AttributeValue().withS("hash value"));
queryExpression = new DynamoDBQueryExpression<Table>()
.withIndexName("index-name")
.withKeyConditionExpression("HK = :v1")
.withExpressionAttributeValues(eav)
.withScanIndexForward(false); //This will sort the result in descending order (w.r to range key)
queryExpression.setLimit(1);
myCollection = dynamoDBMapper.query(Table.class, queryExpression);
问题是它returns 所有具有指定哈希键的记录,按范围键(A3)反向排序。我想单独获得第一张唱片。 (给定 HK 的 A3 值最大的记录)。
我尝试使用 setLimit,但它不起作用。
我怎样才能做到这一点..
我用 queryPage
而不是 query
QueryResultPage<Lookup> res = dynamoDBMapper.queryPage(Table.class, queryExpression);
更多信息here