gpt4 book ai didi

java - 使用来自 java aws sdk 的 DynamoDb 增强客户端,如何使用复合 keyConditionExpression 进行查询?

转载 作者:行者123 更新时间:2023-12-05 01:27:53 27 4
gpt4 key购买 nike

我有一个 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 可以采用 partitionKeysortKey 值来构建其表达式。因此,当您构建 QueryConditional.sortBetween 对象时,您可以在那里定义匹配的 partitionKey:

var partitionKeyValue = "myIdValue"
var sortKeyConditional = QueryConditional.sortBetween(Key.builder()
.partitionValue(partitionKeyValue)
.sortValue(0)
.build(), Key.builder()
.partitionValue(partitionKeyValue)
.sortValue(100)
.build());

关于java - 使用来自 java aws sdk 的 DynamoDb 增强客户端,如何使用复合 keyConditionExpression 进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69126688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com