Lambda(Node.js)からDynamoDBのデータをフィルターして抽出
FilterExpressionを使ったQuery操作
AWSのLambda(Node.js)からDynamoDBのデータは【Query】を使うことで、取得できます。
→AWSのLambda(Node.js)からDynamoDBに対していろんな条件指定でQueryしてみる
更に【FilterExpression】を指定することによって、【Query】の結果を絞り込むことができます。

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);
}
});
});
}
最近のコメント