Amazon Lex и DynamodDB - не удается обновить существующий элемент - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь получить конкретный c элемент из таблицы.

Имя моей таблицы DynamoDB table, и у меня есть:

Name PK | Number<br/>
S: Juan |  S: #####

Когда я пытаюсь беги в Лямбде, я не получаю Предмет, когда он действительно существует, с таким именем ... есть идеи, почему это так?

AWS = require("aws-sdk"),
          DDB = new AWS.DynamoDB({
              region: "REGION",
          }),
          lookup_name_str = name //From Intent variable,
          params = {
              TableName: "table",
              KeyConditionExpression: "name = :v1",
              ExpressionAttributeValues: {
                ":v1":{
                    "S": lookup_name_str
                }
            },
              FilterExpression: 'contains(nomColaborador,:v1)',
              ProjectionExpression: "Number"
          }; 
      
      console.log(params);
      var docClient = new AWS.DynamoDB.DocumentClient();
      docClient.scan(params, function(err, data){
          if(err){
              throw err;
          }
          
          if(data.Items && data.Items[0] && data.Items[0].Number){
              console.log("There is a Name with that number");
              console.log(data.Items[0]);
              my_response.statusCode = 200;
              my_response.body = {
                  "sessionAttributes": {
                      "extension_str": data.Items[0].Number.S,
                      "nomColaborador": event.currentIntent.slots.Name
                  },
                  "dialogAction":{
                      "type": "Close",
                      "fulfillmentState": "Fulfilled",
                      "message": {
                          "contentType": "PlainText",
                          "content": data.Items[0].Number.S
                      }
                  }
              };

1 Ответ

1 голос
/ 08 февраля 2020

Основная проблема здесь в том, что вы делаете scan. KeyConditionExpression не является параметром запроса сканирования. Если вы запрашиваете один элемент по ключу, вы хотите использовать getItem. Если вам нужно запрашивать данные по ключу раздела и дополнительному ключу сортировки, вы должны использовать query.

. С учетом всего сказанного, когда вы сканируете или ставите фильтр в запрос, вам действительно нужно не забудьте пролистать данные. Вы часто обнаруживаете, что получите ответ без данных, но с пейджинговой клавишей для повторного вызова.

...