fbpx

node(express)でDynamoDBのデータを取得する方法

はじめに

個人でDynamoDBを使う機会があり、nodeで操作する方法がAWSのドキュメントだとわかりづらかったため自分なりに修正してコーディングしてみました。

awsのDynamoDBに保存されているデータを取得するとき、色々な方法があったので個人的によく使う物を以下にまとめておきます。

getItem()を使って個別に取得する方法

一番簡単なデータ取得方法です。

パーティションキーを指定して、一件だけデータを取得できます。 ログインユーザー情報などを取得するときに使えばいいのかなと思います。

ただパーティションキーだけしか指定できないため、使い勝手はあまりよろしくない。

以下の例ではidをパーティションキーとして使います。

const dynamodb = new AWS.DynamoDB({ region: "ap-northeast-1" });

router.get("/get", (req, res, next) => {
  const params = {
    TableName: "user",
    Key: {
      id: { S: 1 }
    }
  };
  dynamodb.getItem(params, function(err, user) {
    const user = {
      id: "",
      name: "",
    };
    user.id = user.Item.id.S;
    user.name = user.Item.name.S;
    res.json(user);
  });
});

batchGetItem()でまとめデータを取得する方法

getItemがあるんだからgetItemsもあるだろうと思ったのんですが、ありませんでした。

代替として、batchGetItemがあったのでこれを使いましょう。

こちらもパーティションキーを指定しますが、getItemとは違い配列で送った値に相当するデータを返してくれます。

以下例です。先ほどと同じでidがパーティションキーです。

const dynamodb = new AWS.DynamoDB({ region: "ap-northeast-1" });

router.get("/batchGet", (req, res, next) => {
  const keys = [{id:{S:'1'}},{id:{S:'2'}},{id:{S:'3'}}];
  const params = {
    RequestItems: {
      user: {
        Keys: keys
      }
    }
  };
  dynamodb.batchGetItem(params, function(err, data) {
    data.Responses.user.forEach(function(element, index, array) {
      questions.push({
        id: element.id.S,
        name: element.name.S
      });
    });
    res.send(questions);
  });
});

Query()で細かい検索抽出を行う方法

個人的にこれがよく使う関数です。

前二つで紹介したgetItemとbatchGetItemの問題点は、パーティションキーでしか検索をかけられず、テーブル内の別キーで検索をかけたくてもできないのがつらいところでした。。

Queryを使用して、セカンダリインデックスのパーティションキーで検索かけたら幸せになれそうです。

以下例です。

const dynamodb = new AWS.DynamoDB({ region: "ap-northeast-1" });

router.get("/query", (req, res, next) => {
  params = {
    TableName: "user",
    IndexName: "name-index",
      KeyConditionExpression: "#attrName = :attrValue",
      ExpressionAttributeNames: {
        "#attrName": "name"
      },
      ExpressionAttributeValues: {
        ":attrValue": { S: "Sakuraba" }
      }
    };
  }
  dynamodb.query(params, function(err, user) {
    return res.send(user.Items);
  });
})

終わりに

AWSのドキュメントを見ると他に抽出する方法はありますが、個人的に使うのが上の3つです。

見た感じそこまで複雑ではないので初心者の方にもとっつきやすいかと思います。

DynamoDBを利用するとメンテナンスが容易でデメリットよりメリットのほうが多いです。

ぜひ使いこなせるようになっておきたいものです。

以上です。

資料ダウンロード申し込み

Scroll to Top