AWS

【DynamoDB】AWS SDK を使用した単一項目の取得

今までは項目の追加、更新を行いました。

なお、前回は以下を参照して下さい。

今回は項目の取得を行います。

項目の取得

項目の取得には 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ではインデックスを作成して、インデックスから項目を取得します。
次回はセカンダリインデックスを作成します。

© DeNnie.Lab All Rights Reserved.