Lambda(Node.js)からDynamoDBのテーブルを検索する

Lambda(Node.js)からDynamoDBのテーブルを検索するには3通りメソッドがあります。

Lambda(Node.js)からDynamoDBのテーブルを検索する

getとqueryとscanです。getは1件、queryは複数件返ってくることを想定するため、渡す引数が異なります。

また、getしても0件だった場合、空のオブジェクト({})が返ります。

queryして0件だった場合、空の配列([])が返ります。

この違いがあるので、0件チェックするロジックが異なります。

queryの場合

getの場合

以下、getの場合のパラメータです。

TableName テーブル名
Key パーティションキーとソートキーのオブジェクト型

以下、記述例です。

結果は以下の通りになります。戻り値が1件ですが、オブジェクトで囲まれているのがわかります。

上記構成になるため、data.Itemで初めて取得したいオブジェクトが取得できます。

getは0件の場合は空オブジェクトが返りますが、その際にdata.Itemとするとundefinedになりますので注意が必要です。

次にqueryのパラメータについてです。

TableName テーブル名
IndexName インデックス名(任意)
ExpressionAttributeNames プレースホルダ指定 例){‘#a’: ‘year’}
ExpressionAttributeValues プレースホルダ指定 例){‘:value’: ‘1’}
KeyConditionExpression 検索条件 例)#id = :value

以下、例です。

結果は以下のようになります。

queryの場合は、data.Itemsで配列にオブジェクトが入った値が取得できます。データが2件の場合はオブジェクトも2つ入った配列となります。

queryの結果が0件の場合はdata.Itemsの戻り値は[]になります。

データをソートする

getは1件なのでソートできませんが、scan,queryはデータをソートキーでソートすることができます。

falseにすると降順になります。

以下は降順でソートする例です。

結果は以下のように降順で取得できていることがわかります。

Limitでデータ件数を指定する

と指定することでqueryやscanで件数を指定することができます。Limit:0とするとエラーとなります。

以下、昇順にソートし、1件のみ取得する例です。

結果は以下のように1件取得できます。
スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA