DynamoDBのデータをLambdaでクエリする方法(AWS SDK for JS3がバンドルされているNode.jsを使用)
2023-12-03
こんにちは。
この記事はTechCommit Advent Calendar 2023 3日目の記事です。
別記事ではPartiQLを使用してDynamoDBのデータをクエリする方法を紹介しましたが、本記事ではLambda(Node.js)でクエリする方法を解説します。
※本記事では、DynamoDBとは何ぞや?については触れません。
初心者の方は、Amazon DynamoDBとは何かをわかりやすく図解、どう使う?テーブル設計の方法とはなどを読んでみるとよいと思います。
方法
前回と同じデータを例に説明します。
コードは以下の通りです。
|
|
上記のコードを実行すると、以下のjsonが返ってきます。
|
|
コードの解説
KeyConditionExpressionとFilterExpressionが、SQLでいうwhere句にあたります。
Keyの方ではパーティションキー(必須)とソートキー(任意)を指定します。
Filterの方は、パーティションキーとソートキー以外のカラムを検索に使いたい時に使用します。
検索条件は、prefecture = "東京都"
のように直接指定せず、プレースホルダを使用します。
prefecture = :prefecture
としておき、ExpressionAttributeValuesで":prefecture":"東京都"
とします。
検索に使いたいカラム名がDynamoDBの予約語だった場合、検索条件の中で直接指定することができません。今回の場合、「date」の部分が該当します。
通常であればbegins_with(date,:date)
で良いのですが、これではエラーになります。
そのため、検索条件内では#を付けてbegins_with(#date,:date)
とし、
ExpressionAttributeNamesの中で"#date":"date"
のようにカラムを指定します。
おわりに
なんたらExpression、なんたらAttributeがたくさん出てきて最初は大変ですが、最小構成から少しずつ試すと分かってくると思います。
誰かの参考になれば幸いです。
参考
JavaScript (v3) 用の SDK を使用した DynamoDB の例
QueryCommand
Filter expressions for the Query operation