今までは項目の追加、更新を行いました。
なお、前回は以下を参照して下さい。
今回は項目の取得を行います。
目次
項目の取得
項目の取得には getItem メソッドを使用します。
getItem はプライマリキーの値を指定して実行します。
テーブルの内容
Musicsというテーブルに対して getItem を実行します。
テーブルの内容は以下の通りです。
artist: パーテションキー
title: ソートキー
全属性取得
getItemは単一項目を取得し、全属性を取得できます。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec() {
// 実行内容
let params = {
TableName : "Musics",
Key:{
"artist": {"S":"B'z"},
"title": {"S": "GREEN"},
},
ReturnConsumedCapacity: "INDEXES"
};
// 実行
return await this.dynamodb.getItem(params).promise();
}
}
実行内容の説明
Key
Keyには取得したい項目のプライマリキーを指定して下さい。
ReturnConsumedCapacity
ReturnConsumedCapacity の指定は putItem、updateItem と同じです。
戻り値の指定は任意なので適宜指定して下さい。
また、戻り値については前回を参考にして下さい。
結果
{
"Item": {
"artist": {
"S": "B'z"
},
"sngsCnt": {
"N": "12"
},
"title": {
"S": "GREEN"
}
},
"ConsumedCapacity": {
"TableName": "Musics",
"CapacityUnits": 0.5,
"Table": {
"CapacityUnits": 0.5
}
}
}
指定した属性のみ取得
指定した属性のみ結果を取得したい場合、ProjectionExpression に属性名を取得します。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec() {
// 実行内容
let params = {
TableName : "Musics",
Key:{
"artist": {"S":"B'z"},
"title": {"S": "GREEN"},
},
ProjectionExpression: "sngsCnt, title",
ReturnConsumedCapacity: "INDEXES"
};
// 実行
return await this.dynamodb.getItem(params).promise();
}
}
実行内容の説明
ProjectionExpression
ProjectionExpression へ属性名を指定すると、指定した属性のみデータを取得できます。
結果
{
"Item": {
"sngsCnt": {
"N": "12"
},
"title": {
"S": "GREEN"
}
},
"ConsumedCapacity": {
"TableName": "Musics",
"CapacityUnits": 0.5,
"Table": {
"CapacityUnits": 0.5
}
}
}
強力な生合成読み込み
強力な生合成読み込みを行いたい場合、ConsistentRead を true に指定します。
実行
const DynamoDbSetter = require("./DynamoDbSetter");
module.exports = class DynamoDbOperator extends DynamoDbSetter{
async exec() {
// 実行内容
let params = {
TableName : "Musics",
Key:{
"artist": {"S":"B'z"},
"title": {"S": "GREEN"},
},
ConsistentRead: true,
ProjectionExpression: "sngsCnt, title",
ReturnConsumedCapacity: "INDEXES"
};
// 実行
return await this.dynamodb.getItem(params).promise();
}
}
実行内容の説明
ConsistentRead
ConsistentRead を true に指定すると、強力な整合性読み込みが行えます。
結果
{
"Item": {
"sngsCnt": {
"N": "12"
},
"title": {
"S": "GREEN"
}
},
"ConsumedCapacity": {
"TableName": "Musics",
"CapacityUnits": 1,
"Table": {
"CapacityUnits": 1
}
}
}
キャパシティユニットが0.5ではなく1になっています。
最後に
項目の取得にはテーブルのプライマリキーの値を指定します。
プライマリキー以外の属性を使用して項目を取得しない場合があります。
このような時にDynamoDBではインデックスを作成して、インデックスから項目を取得します。
次回はセカンダリインデックスを作成します。