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の場合

if (data.length === 0)

getの場合

if (Object.Keys(data).length === 0)

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

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

以下、記述例です。

var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = (event, context, callback) => {
  const params = {
    TableName: 'A_TBL',
    Key: {'hashkey':'1', 'sortkey':'1'}
  }
  return dynamo.get(params, function(err, data) {
    if (err) {
      context.fail(err); // エラー時
    } else {
      context.succeed(data); // 正常時
    }
  });
  callback(null);
};

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

{
  "Item": {
    "hashkey": "1",
    "sortkey": "1"
  }
}

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

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

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

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

以下、例です。

const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const params = {
  TableName: 'sample',
  KeyConditionExpression: ' #id = :value ',
  ExpressionAttributeNames: {
    '#id': 'id'
  },
  ExpressionAttributeValues: {
    ':value': '1'
  }
};
exports.handler = (event, context, callback) => {
  dynamo.query(params, function(err, data) {
    if (err) {
      context.fail(err); // エラー時
    } else {
      context.succeed(data); // 正常時
    }
  });
};

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

{
  "Items": [
    {
      "id": "1",
      "sortkey": "1",
      "name": "jiro"
    }
  ],
  "Count": 1,
  "ScannedCount": 1
}

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

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

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

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

CAPTCHA