Amazon Lex和DynamodDB-无法更新现有项目

问题描述 投票:0回答:1

我正在尝试从表中获取特定项目。

我的DynamoDB表名称为table,我有:

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

[当我尝试在Lambda中运行时,当它真正存在时没有任何项目具有该名称...知道为什么会这样吗?

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
                      }
                  }
              };
amazon-web-services aws-lambda amazon-dynamodb amazon-lex dynamodb-queries
1个回答
1
投票

这里的主要问题是您正在执行scanKeyConditionExpression不是扫描请求的参数。如果要通过按键请求单个项目,则要使用getItem。如果需要通过分区键和可选的排序键查询数据,则应使用query

话虽如此,当您进行扫描或对查询进行过滤时,您确实需要确保对数据进行分页。您会经常发现,您将得到一个没有数据的响应,但只有一个寻呼键可以拨打另一个电话。

© www.soinside.com 2019 - 2024. All rights reserved.