
[英]SpringBoot - Java AWS SDK 2 DynamoDB Enhanced Client and devtools problem
[英]With DynamoDb enhanced client from java aws sdk, how do you query using a compound keyConditionExpression?
我有一个 DynamoDb 表,其中有两个键的 GSI - 字符串字段“id”(分区键)和数字字段“count”(排序键)。
我正在尝试使用此表上 SDK 中的 DynamoDbEnhancedClient 来计算如何通过 Spring Java 应用程序运行查询(而不是扫描)以获取关键条件表达式:
#id = :idValue and #count between :minCount and :maxCount
我可以为这个复合表达式的每个部分构建两个单独的 QueryConditional 对象,例如:
var partitionKeyConditional = QueryConditional.keyEqualTo(Key.builder()
.partitionValue("myIdValue")
.build());
var sortKeyConditional = QueryConditional.sortBetween(Key.builder()
.sortValue(0)
.build(), Key.builder()
.sortValue(100)
.build());
但我不知道如何在实际查询请求中组合这些:
dynamoDbEnhancedClient.table(myTableName, TableSchema.fromBean(TableObject.class))
.query(QueryEnhancedRequest.builder()
.queryConditional(SomeJoinFunction??(partitionKeyConditional, sortKeyConditional))
.build())
.items();
我可以看到我可以使用 filterExpression,但我认为这会在查询中应用关键条件来选择结果之后发生,因此排序键定义的优势基本上已经丧失。 然而,它最类似于我想要的功能:
var expressionAttributeNames = new HashMap<String, String>() {{
put("#id", ID_PROPERTY_NAME);
put("#count", COUNT_PROPERTY_NAME);
}};
var expressionAttributeValues = new HashMap<String, AttributeValue>() {{
put(":idValue", AttributeValue.builder().s("myId").build());
put(":minCount", AttributeValue.builder().n("0").build());
put(":maxCount", AttributeValue.builder().n("100").build());
}};
var queryExpression = Expression.builder()
.expressionNames(expressionAttributeNames)
.expressionValues(expressionAttributeValues)
.expression("#id = :idValue and #count between :minCount and :maxCount")
.build();
我可能遗漏了一些明显的东西,有什么建议吗?
QueryConditionals
使用的 Key Builder 可以采用partitionKey
和sortKey
值来构建其表达式。 因此,当您构建QueryConditional.sortBetween
对象时,您可以在那里定义匹配的partitionKey
:
var partitionKeyValue = "myIdValue"
var sortKeyConditional = QueryConditional.sortBetween(Key.builder()
.partitionValue(partitionKeyValue)
.sortValue(0)
.build(), Key.builder()
.partitionValue(partitionKeyValue)
.sortValue(100)
.build());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.