我正在尝试从表中获取特定项目。
我的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
}
}
};
这里的主要问题是您正在执行scan
。 KeyConditionExpression
不是扫描请求的参数。如果要通过按键请求单个项目,则要使用getItem
。如果需要通过分区键和可选的排序键查询数据,则应使用query
。
话虽如此,当您进行扫描或对查询进行过滤时,您确实需要确保对数据进行分页。您会经常发现,您将得到一个没有数据的响应,但只有一个寻呼键可以拨打另一个电话。