Lambda(Node.js)からDynamoDBのデータをフィルターして抽出

2021-12-28

FilterExpressionを使ったQuery操作

AWSのLambda(Node.js)からDynamoDBのデータは【Query】を使うことで、取得できます。
AWSのLambda(Node.js)からDynamoDBに対していろんな条件指定でQueryしてみる

更に【FilterExpression】を指定することによって、【Query】の結果を絞り込むことができます。

  1. FilterExpression
  2. FilterExpressionを指定したQuery操作プログラム
  3. 参考

1. FilterExpressionについて

Queryを使うとき、KeyConditionExpressionでソートキー値と比較演算子を指定することにより、クエリ操作の範囲を狭めることができます。
クエリ結果をさらに絞り込むために、オプションでFilterExpressionを使うことができます。
FilterExpressionは、結果内のどのアイテムを返すかを指定でき、指定しない他のすべてのクエリ結果は破棄されます。

その他

  • パーティションキーまたはソートキーに基づいてフィルター式を定義することはできません。
  • FilterExpressionは、アイテムがすでに読み取られた後に適用されます。
  • フィルタリングのプロセスは、追加の読み取り容量ユニットを消費しません。
  • フィルターは文字列で指定。
  • FilterExpressionはオプションなので指定しなくてもOK。

2. FilterExpressionを指定したQuery操作プログラム

パラメータの中にFilterExpressionを追加します。

ExpressionAttributeNamesにフィルターに使うカラム名を指定します。

ExpressionAttributeValuesに文字列で取り出したい値を指定します。

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

exports.handler = async (event) => {

    let res= await dynamo_query();//Queryの実行
    
    return res;
};

function dynamo_query(){
    return new Promise((resolve, reject) => {
        let params = {
            "TableName": "TableName",//テーブル名
            "KeyConditionExpression": "#pk_name = :pk_prm",//クエリ条件
            "FilterExpression": "#filter_name = :filter_prm",//フィルター
            "ExpressionAttributeNames":{
                "#pk_name": "pk_name",//pkの名称
                "#filter_name": "pk_name",//フィルターカラムの名称
            },
            "ExpressionAttributeValues": {
                ":pk_prm": "pk_prm",//取得したいpkの値
                ":filter_prm": "filter_prm"//取得したい値
            }
        };
        dynamo.query(params,function(err, data) {
            if (err) {
                reject(err, err);
            } else {
                resolve(data.Items);
            }
        });
    });
}

参考