You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java AWS SDK的DynamoDbEnhancedClient如何实现复合键条件查询

你不需要单独拼接两个QueryConditional对象,DynamoDbEnhancedClient的QueryConditional静态方法本身就支持直接生成复合键条件,全程走索引查询,不会触发后置过滤,性能符合要求。

正确实现逻辑如下:

1. 直接构建复合键查询条件

QueryConditional的所有排序键相关方法,要求传入的Key对象同时包含分区键值+排序键值,会自动生成分区键相等 + 排序键对应条件的复合键表达式:

QueryConditional compositeConditional = QueryConditional.sortBetween(
    // 下限Key:指定分区值+排序键最小值
    Key.builder()
        .partitionValue("myIdValue")
        .sortValue(0)
        .build(),
    // 上限Key:指定相同分区值+排序键最大值
    Key.builder()
        .partitionValue("myIdValue")
        .sortValue(100)
        .build()
);

2. 执行查询

直接把构建好的复合条件传入请求即可,如果是查询GSI,需要额外指定索引名:

dynamoDbEnhancedClient.table(myTableName, TableSchema.fromBean(TableObject.class)) 
   .query(QueryEnhancedRequest.builder()
        .indexName("你的GSI名称") // 针对GSI查询必须指定索引名
        .queryConditional(compositeConditional)
        .build())
   .items();

补充说明

  • 其他排序键条件的用法同理:比如要查指定分区下count大于某个值的记录,直接用QueryConditional.sortGreaterThan(),传入包含分区值和排序键阈值的Key即可。
  • 这种实现生成的原生键条件表达式和你预期的完全一致,会直接利用GSI的索引能力,不会用到filterExpression的后置过滤逻辑,性能最优。

内容的提问来源于stack exchange,提问作者Brett Richards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:39:02