Имя атрибута является зарезервированным ключевым словом в DynamoDB - PullRequest
0 голосов
/ 30 апреля 2018

Я получаю сообщение об ошибке, что имя столбца является зарезервированным ключевым словом при чтении значений из DynamoDB. Я пытаюсь прочитать значение столбца с именем «Статус».

Мой скрипт:

<script>
    AWS.config.update({
      region: "us-west-2",
      endpoint: 'https://dynamodb.us-west-2.amazonaws.com',
      accessKeyId: "Fakeaccesskey",
      secretAccessKey: "Fakesecretkey"
    });

    var docClient = new AWS.DynamoDB.DocumentClient();

    function readItembedonestatus() {
        var table = "TA_Latest_Log";
        var GWID = "BB00000001";
        var ID = "AA00000013";

        var params = {
            TableName: table,
            Key:{
                "GWID": GWID,
                "ID": ID
            },
               "ProjectionExpression": "#node_status"
               "ExpressionAttributeNames": "#node_status": "Status"
        };
        docClient.get(params, function(err, data) {
            if (err) {
                document.getElementById('bedonestatus').innerHTML = "Unable to read item: " + "\n" + JSON.stringify(err, undefined, 2);
            } else {
                document.getElementById('bedonestatus').innerHTML = data.Item.#node_status + "&deg;";

            }
        });
    }

</script>

Я добавил ExpressionAttributeNames, однако я не могу заставить его работать. Сценарий выше ничего не возвращает.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

@ Stu Следующий запрос работает, но это потому, что у него нет зарезервированного ключевого слова (BatV).

<script>
    AWS.config.update({
      region: "us-west-2",
      endpoint: 'https://dynamodb.us-west-2.amazonaws.com',
      accessKeyId: "Fakeaccesskey",
      secretAccessKey: "Fakesecretkey"
    });

    var docClient = new AWS.DynamoDB.DocumentClient();

    function readItemkitchenbat() {
        var table = "TA_Latest_Log";
        var GWID = "BB00000001";
        var ID = "AA00000029";

        var params = {
            TableName: table,
            Key:{
                "GWID": GWID,
                "ID": ID
            },
               "ProjectionExpression": "BatV"
        };
        docClient.get(params, function(err, data) {
            if (err) {
                document.getElementById('kitchenbat').innerHTML = "Unable to read item: " + "\n" + JSON.stringify(err, undefined, 2);
            } else {
                document.getElementById('kitchenbat').innerHTML = data.Item.BatV + "V";

            }
        });
    }

</script>

Это документация Amazon по зарезервированным ключевым словам: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html

Я очень ценю ваше время и помощь.

0 голосов
/ 30 апреля 2018
<script>
    AWS.config.update({
      region: "us-west-2",
      endpoint: 'https://dynamodb.us-west-2.amazonaws.com',
      accessKeyId: "Fakeaccesskey",
      secretAccessKey: "Fakesecretkey"
    });

    var docClient = new AWS.DynamoDB.DocumentClient();

    function readItembedonestatus() {
        var table = "TA_Latest_Log";
        var GWID = "BB00000001";
        var ID = "AA00000013";

        var params = {
            TableName: table,
            Key:{
                "GWID": GWID,
                "ID": ID
            },
            ExpressionAttributeNames: {"#node_status":"Status"},
            ProjectionExpression: "#node_status"
        };
        docClient.get(params, function(err, data) {
            if (err) {
                document.getElementById('bedonestatus').innerHTML = "Unable to read item: " + "\n" + JSON.stringify(err, undefined, 2);
            } else {
                document.getElementById('bedonestatus').innerHTML = data.Item.#node_status + "&deg;";

            }
        });
    }

</script>

ExpressionAttributeNames должен быть картой. И вам не хватает запятой в вашем списке параметров ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...