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

Node.jsでDynamoDBを操作する(CRUD処理編)

$
0
0
概要 表題通り、Node.jsでDynamoDBを操作する記事です。 基本情報 操作TBL ディレクトリ構成 ~/develop/study/aws/node/dynamo $ tree . ├── crud │ ├── OlympicCreateItem.js │ ├── OlympicDeleteItem.js │ ├── OlympicGetItem.js │ └── OlympicUpdateItem.js ├── data │ └── olympicData.json └── migration ├── OlympicCreateTable.js └── OlympicLoadData.js 3 directories, 7 files 事前準備 TBL作成(OlympicCreateTable.js) var AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1" }); var dynamodb = new AWS.DynamoDB(); var params = { TableName : "Olympic", KeySchema: [ { AttributeName: "Id", KeyType: "HASH"}, //Partition key { AttributeName: "Country", KeyType: "RANGE" } //Sort key ], AttributeDefinitions: [ { AttributeName: "Id", AttributeType: "N" }, { AttributeName: "Country", AttributeType: "S" } ], ProvisionedThroughput: { ReadCapacityUnits: 10, WriteCapacityUnits: 10 } }; dynamodb.createTable(params, function(err, data) { if (err) { console.error("TBL作成失敗:", JSON.stringify(err, null, 2)); } else { console.log("TBL作成成功:", JSON.stringify(data, null, 2)); } }); olympicData.json [ { "Id": 1, "Country": "日本", "Medal": { "GoldMedal": 11, "SilverMedal": 11, "BronzeMedal": 11 } }, { "Id": 2, "Country": "アメリカ", "Medal": { "GoldMedal": 10, "SilverMedal": 8, "BronzeMedal": 7 } }, { "Id": 3, "Country": "中国", "Medal": { "GoldMedal": 5, "SilverMedal": 5, "BronzeMedal": 5 } } ] TBL作成の実行結果 ~/develop/study/aws/node/dynamo/migration $ node OlympicCreateTable.js TBL作成成功: { "TableDescription": { "AttributeDefinitions": [ { "AttributeName": "Country", "AttributeType": "S" }, { "AttributeName": "Id", "AttributeType": "N" } ], "TableName": "Olympic", "KeySchema": [ { "AttributeName": "Id", "KeyType": "HASH" }, { "AttributeName": "Country", "KeyType": "RANGE" } ], "TableStatus": "CREATING", "CreationDateTime": "2021-07-29T10:20:05.059Z", "ProvisionedThroughput": { "NumberOfDecreasesToday": 0, "ReadCapacityUnits": 10, "WriteCapacityUnits": 10 }, "TableSizeBytes": 0, "ItemCount": 0, "TableArn": "arn:aws:dynamodb:ap-northeast-1:696770525325:table/Olympic", "TableId": "5e5fb4bf-a314-496e-ad61-40387663f17f" } } データのロード(OlympicLoadData.js) var AWS = require("aws-sdk"); var fs = require('fs'); AWS.config.update({ region: "ap-northeast-1", }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log("データのロード開始"); var Countries = JSON.parse(fs.readFileSync('../data/olympicData.json', 'utf8')); Countries.forEach(function(country) { console.log(country) var params = { TableName: "Olympic", Item: { "Id": country.Id, "Country": country.Country, "Medal": country.Medal } }; docClient.put(params, function(err, data) { if (err) { console.error("ロード失敗", country.Id, ". Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("ロード成功:", country.Id + country.Country); } }); }); データのロード ~/develop/study/aws/node/dynamo/migration $ node OlympicLoadData.js データのロード開始 { Id: 1, Country: '日本', Medal: { GoldMedal: 11, SilverMedal: 11, BronzeMedal: 11 } } { Id: 2, Country: 'アメリカ', Medal: { GoldMedal: 10, SilverMedal: 8, BronzeMedal: 7 } } { Id: 3, Country: '中国', Medal: { GoldMedal: 5, SilverMedal: 5, BronzeMedal: 5 } } ロード成功: 3中国 ロード成功: 1日本 ロード成功: 2アメリカ CREATE文 OlympicCreateItem.js var AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", }); var docClient = new AWS.DynamoDB.DocumentClient(); var table = "Olympic"; var params = { TableName:table, Item:{ "Id": 4, "Country": "ドイツ", "Medal": { "GoldMedal": 7, "SilverMedal": 7, "BronzeMedal": 7 } } }; docClient.put(params, function(err, data) { if (err) { console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("Added item"); } }); READ文 OlympicGetItem.js var AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", }); var docClient = new AWS.DynamoDB.DocumentClient(); var table = "Olympic"; var params = { TableName: table, Key:{ "Id": 1, "Country": '日本' } }; docClient.get(params, function(err, data) { console.log(params) console.log(data) if (err) { console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); } }); UPDATE文 OlympicUpdateItem.js var AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", }); var docClient = new AWS.DynamoDB.DocumentClient() var table = "Olympic"; var params = { TableName:table, Key:{ "Id": 1, "Country": '日本' }, UpdateExpression: "set Medal.GoldMedal = :g", ExpressionAttributeValues:{ ":g":17, }, ReturnValues:"UPDATED_NEW" }; console.log("Updating the item..."); docClient.update(params, function(err, data) { if (err) { console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2)); } }); DELETE文 OlympicDeleteItem.js var AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1" }); var docClient = new AWS.DynamoDB.DocumentClient(); var table = "Olympic"; var params = { TableName:table, Key:{ "Id": 4, "Country": 'ドイツ' }, }; console.log("Attempting a conditional delete..."); docClient.delete(params, function(err, data) { if (err) { console.error("Unable to delete item. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("DeleteItem succeeded:", JSON.stringify(data, null, 2)); } });

Viewing all articles
Browse latest Browse all 9016

Trending Articles