DynamoDBでテーブルに入っているデータをすべて取得する

Node.jsからDynamoDBでテーブルに入っている全てのデータを取得しようとするとscan()メソッドを使うのですが、デフォルトの挙動では 最大1MBまでのデータしか読み込むことができません。
すべてのデータを取得する場合は、scanした時に読み込めていないデータが有る場合はLastEvaluatedKeyが返ってきますのでこれを使って再帰的にscanする必要があります。

...
var db = new AWS.DynamoDB({apiVersion: '2012-08-10'});
readAll(callback) {
  var objects = [];
  var params = {
    TableName: ‘tablename’
  };
  doScan(params,(err,res) => {
    return callback(err,res);
  });
}

doScan(params,callback)  {
    
  
  db.scan(params,(err,res) => {

    //最後の内容まで取得できなかった場合はdoScanを繰り返す
    if (res['LastEvaluatedKey']){
      console.log('found last evaluatedKey');
      params.ExclusiveStartKey = res.LastEvaluatedKey;
      
      res.Items.map((item) => {
        objects.push(item);
      })
      this.doScan(params,callback);
    }else {
      //全てのデータが読み込めたらcallbackを返す
      console.log('finished scan’);
      res.Items.map((item) => {
        objects.push(item);
      })
      return callback(err, objects);
    }
  });
}

Related Contents

Pickup Contents