Node.js
AWS
DynamoDB

Node.jsからDynamoDBを操作する際に便利そうなやつを試す。

More than 3 years have passed since last update.


1. dynamodb-marshaler

データを登録したりするときに、いちいち下記のように "S": とか書くのがめんどくさい。

取り出したデータも同様の形になってて使うのがめんどくさい。

Item: {

'id': {"S": "1003"},
'name': {"S": "orange"},
'price': {"N": "210"}
}

なので、DynamoDBの求めるデータ型と、json形式を相互変換してくれるやつを試す。

https://github.com/CascadeEnergy/dynamoDb-marshaler


インストール:

$ npm install dynamodb-marshaler --save


プログラム:

var marshaler = require('dynamodb-marshaler');

data = {
name: "John",
birth: {
"year": 1980,
"month": "January",
"day": 14
}
}

// 元データ表示
console.log(data);

// 変換後
var res = marshaler.marshalItem(data);
console.log(res);

// 元に戻す
var orig = marshaler.unmarshalItem(res);
console.log(orig);


出力:

{ name: 'John',

birth: { year: 1980, month: 'January', day: 14 } }
{ name: { S: 'John' },
birth: { M: { year: [Object], month: [Object], day: [Object] } } }
{ name: 'John',
birth: { year: 1980, month: 'January', day: 14 } }

ちゃんと、変換して元のデータに戻しても同じ状態。

LIST と StringSet の扱いが注意が必要そう。

あと、便利そうなのが、mapで一括でハッシュの配列にするやつ。


プログラム:

var data = dynamodb.scan({

TableName: 'json_test'
}, function(err, data) {
var items = data.Items.map(marshaler.unmarshalItem);
console.log(items);
});


出力:

[ { name: 'delete_item!', id: '1010', price: 222 },

{ name: 'batch-put-item-2!', id: '2002', price: 9991 },
{ name: 'batch-put-item-1!', id: '2001', price: 9990 },
{ name: 'banana', id: '1002', price: 80 },
{ name: 'apple', id: '1001', price: 120 },
{ name: 'orange', id: '1003', price: 30 } ]

これは良さそう。