DynamoDB から DocumentClient で get() した StringSet型 の値を取り出す

[最終更新] 2020年12月10日

AWS DynamoDBで使える型の一つに、StringSetがある。これは文字列の集合だ。JavaScriptでもES6以降にはSet型があるので、それと対応していればよいのだが、残念ながらしていない。

といっても、値を取り出すには、.values でアクセスすればよいだけ。というメモ。普段Python使っているのですぐに忘れる。

環境

  • node.js 12.20.0
  • aws-sdk 2.580.0

値の取り出し方

結論だけ書くと、以下で、値の配列が得られる(Array.isArray()で調べたらtrueだったという意味で)。色々端折っているがまぁわかるかと。

data = await documentClient.get(params).promise();
const values = data.Item.<パラメータ>.values
=> values = [値1, 値2, ...]

もうちょっと色々

DocumentClient(Class: AWS.DynamoDB.DocumentClient — AWS SDK for JavaScript)でget()した値について、propertyについて調べたら以下のようになっていた。

wrapperName: Set
values: https://0waj1fsulf.execute-api.ap-northeast-1.amazonaws.com/Prod/post
type: String
constructor: function Set(list, options) {
    options = options || {};
    this.wrapperName = 'Set';
    this.initialize(list, options.validate);
  }
initialize: function(list, validate) {
    var self = this;
    self.values = [].concat(list);
    self.detectType();
    if (validate) {
      self.validate();
    }
  }
detectType: function() {
    this.type = memberTypeToSetType[typeOf(this.values[0])];
    if (!this.type) {
      throw util.error(new Error(), {
        code: 'InvalidSetType',
        message: 'Sets can contain string, number, or binary values'
      });
    }
  }
validate: function() {
    var self = this;
    var length = self.values.length;
    var values = self.values;
    for (var i = 0; i < length; i++) {
      if (memberTypeToSetType[typeOf(values[i])] !== self.type) {
        throw util.error(new Error(), {
          code: 'InvalidType',
          message: self.type + ' Set contains ' + typeOf(values[i]) + ' value'
        });
      }
    }
  }
toJSON: function() {
    var self = this;
    return self.values;
  }

initialize を見ても、.valuesで配列が取り出せることがわかる。

関連コンテンツ

関連記事

スポンサーリンク

カテゴリーaws

コメントを残す

メールアドレスが公開されることはありません。