書こうと思ったきっかけ
今参画してるプロジェクトのデータベースにDynamoDBを使っていて、そのORMとしてDynamooseを使っています。
ただ、調べながら実装していて思ったのが、記事が少ないんじゃあということ😅
なので、今回は実務でよく使っているクエリ文を紹介できたらと思います。
そもそもORMとは
オブジェクト指向プログラミングにおけるオブジェクトとリレーショナルデータベース(RDB)の間でデータの相互変換を行うこと。そのための機能やソフトウェアのこと。
プログラムからRDBへデータを保存するには、オブジェクトを実体化したインスタンスの持つ値を、データベースの表中の項目に当てはめて書き込む操作(読み込みの場合はこれとは逆の操作)を行なうが、通常はデータベース管理システム(DBMS)へ操作を依頼するSQL文などを生成・発行するコードをプログラム中にその都度記述しなければならない。
ORMはこの処理を専門的に受け持つもので、あらかじめ設定された対応関係の情報に基づき、インスタンスのデータをデータベースの対応するテーブルへ書き出したり、データベースからデータを読み込んでインスタンスに代入したりといった操作を自動的に行なってくれる。
らしい…。よくわからないけど、めんどくさい処理をやってくれるみたいな感じですかね。。
参考記事
Query紹介
query
引数に、テーブルまたはグローバルインデックスのキーを指定します。後述するeqで結ばないとエラーになります。(っていうのをパイセンから聞いた)
query('key').eq('a').exec()
だと、aと等しいkeyを取得するみたいな感じですかね。
exec
クエリを実行する役割があります。queryの第2引数にコールバックを指定した場合は、execコマンドが自動的に呼び出されますが、指定していない場合は必要になります。
eq
引数に指定したものと等しいものを取得したい時に使います。equalから来ているのかな。
lt
引数に指定したものより、小さい値を取得したい時に使います。less thanから来てそうですね。不等号で表すと「<」かな。
le
引数に指定したもの以下の値を取得したい時に使います。less equalから来てそうですね。不等号で表すと「<=」かな。
ge
引数に指定したもの以上の値を取得したい時に使います。greater equalから来てそうですね。不等号で表すと「>=」かな。
gt
引数に指定したものより、大きい値を取得したい時に使います。greater thanから来てそうですね。不等号で表すと「>」かな。
in
複数の値を取りうるものを取得する時に使います。
in([1,2])
この指定の仕方で、「1または2と等しい」ものを取得します。引数の型は配列になります。
where
SQL文でもお馴染みの、対象を絞り込むためのやつです。
query('key').eq('a').where('number').le(3).exec()
query('key').eq('a').filter('number').le(3).exec()
だと、「keyがaと等しい」かつ「numberが3以下」のものを取得するみたいな感じですかね。
filterでも同じように指定できます。
limit
引数に指定した数だけ、テーブルから取得します。
limit(3)
だと、3つだけテーブルから取得します。
sort
文字の通り、取得したものを並び替えます。引数にdescendingを指定すると降順に、ascendingを指定すると昇順に並び替えます。
using
引数にインデックスキーを指定するのですが、sortと一緒に使うことが多い気がします。例えば、日付(date)というキーがあり、日付の新しい順に並び替えたいという時は
sort('descending').using('date')
みたいな感じです。
参考記事
最後までお読みいただきありがとうございました!