Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

DynamoDBにあるデータをnode.js(AWS Lambda)を使って更新する方法

$
0
0

DynamoDBに保存しているデータに対して更新する処理を作る際に詰まったので軽くまとめました。

ざっくり実装

booksテーブルに保存されているデータのうち、特定のauthorIdとcreatedAtに一致するデータのcontent情報を更新したいとする

'use strict';constAWS=require("aws-sdk");constdynamoDb=newAWS.DynamoDB({apiVersion:'2012-08-10'});consttableName="books";constqueryParams=(authorId,createdAt,content)=>{return{TableName:tableName,Key:{// 更新対象のデータを絞るための条件を指定'authorId':{S:authorId},// Primary partition key どうも型の指定が必要らしい'createdAt':{N:String(createdAt)}// Primary sort key どうも型の指定が必要らしい},// setで更新対象のkeyを指定する。 この場合、contentに入っているデータを、引数で渡されたもので更新するUpdateExpression:'set content = :content',ExpressionAttributeValues:{':content':{S:content},// どうも型の指定が必要らしい},ReturnValues:"UPDATED_NEW"};};// ファイル名がcreatedAt_startAt_endAt.mp4という命名でexports.handler=(event,context,callback)=>{const[authorId,createdAt,content]=event.resources;// eventからデータが取れると仮定constparams=queryParams(authorId,createdAt,content);dynamoDb.updateItem(params,(err,dynamoData)=>{if(err){console.log(JSON.stringify(err));}else{console.log(dynamoData);// 更新した結果が出力される}callback(null,);});};

注意点

  • 対象のデータを検索するにはPrimary partition keyPrimary sort keyしか使えないっぽい
    • その他のKeyでfilterするのは無理っぽそう
  • 検索パラメータのKeyやExpressionAttributeValuesのvalueは実際に格納しているデータの型(Number, Stringなど)を指定する必要があるっぽい
    • queryするときのフィルタ条件ではそういう必要はなかったと思うので、割とややこしい

参考


Viewing all articles
Browse latest Browse all 8691

Trending Articles