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で配列が取り出せることがわかる。
コメント