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



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

我的 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
}
}
};

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

综上所述,当您进行扫描或对查询进行过滤器时,您确实需要确保浏览数据。您经常会发现,您收到的响应没有数据,但有一个寻呼键来进行另一次调用。

最新更新