はじめに
AWSのサービスで何かある程度無料で使えるものはないか?を探してDynamoDB を発見!
DynamoDB を使ってチャットアプリを作っていたのですが、その際に大小検索のやり方が分からずハマったので残しておきます。
環境
Java 21
Spring Boot 3.4.2
spring-cloud-aws-starter-dynamodb 3.2.1
DynamoDBのテーブルレイアウト
TableName:message
Partition key: channelId
Sort key: createdAt
※ キー項目以外は省略
やりたかったこと
channelId指定 かつ createdAtが 1日前以降
実現したソース
※ fromDateは前日日付と仮定
import com.tarosuke777.hc.entity.Message;
import io.awspring.cloud.dynamodb.DynamoDbTemplate;
import software.amazon.awssdk.enhanced.dynamodb.model.Page;
import software.amazon.awssdk.enhanced.dynamodb.model.PageIterable;
software.amazon.awssdk.enhanced.dynamodb.model.QueryConditional;
import software.amazon.awssdk.enhanced.dynamodb.model.QueryEnhancedRequest;
~中略~
QueryConditional keyEqual = QueryConditional
.sortGreaterThan(b -> b.partitionValue(channelId).sortValue(fromDate));
QueryEnhancedRequest tableQuery = QueryEnhancedRequest.builder().queryConditional(keyEqual).build();
PageIterable<Message> pages = dynamoDbTemplate.query(tableQuery, Message.class);
Optional<Page<Message>> firstPage = pages.stream().findFirst();