我正在尝试开发一种技能,Alexa将读取用户指定日期的DynamoDB表中的信息。我已经设法使用Lambda中的nodejs查询DynamoDB表,并且能够返回具有特定日期的所有项目。请参阅以下代码:
function queryDynamoDate_multiple() {
const startdate = this.attributes['startdate'];
var say = '';
var params = {
TableName: 'RegalCinema',
KeyConditionExpression: "#date = :yymmdd and #time between :time1 and :time2",
ExpressionAttributeNames:{
"#date": "date",
"#time": "time"
},
ExpressionAttributeValues: {
":yymmdd":startdate,
":time1":'0',
":time2":'2'
}};
readDynamoItem(params, myResult=>{
say = myResult;
say = 'you asked,. The answer is: ' + myResult;
this.response.speak(say).listen('try again');
this.emit(':responseReady');
});
}
function readDynamoItem(params, callback) {
var title = [];
var time = [];
var noofitems = 0;
let speechOutput = "";
docClient.query(params, (err, data) => {
if (err) {
this.emit(':tell', 'Test Error');
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) {
console.log(" -", item.title + ": ");
noofitems = noofitems + 1;
title[noofitems] = item.title;
time[noofitems] = item.time;
});
for (var l = 1; l <= noofitems ; l++){
if ( l== noofitems){
speechOutput = speechOutput +" and "+ title[l] + " at " + time[l] + ". ";
} else if ( l == 1) {
speechOutput = speechOutput + title[l] + " at " + time[l];
} else {
speechOutput = speechOutput + ", " + title[l] + " at "+ time[l];
}
}
callback(speechOutput)
}
});
}
我现在想要进展并返回所有项目多天(最多7天)。因为您只能使用&#39; equals&#39;来查询表中的主分区键。而不是在&#39;之间两个值。我怀疑我唯一的选择是多次运行此函数,并为params设置不同的日期。但是,我正在努力做到这一点,在做了一些阅读之后我相信它是由于函数的异步性质。
我需要循环遍历此函数一定次数(1到7之间)并在每次运行时将日期加1。理想情况下,我想将标题存储在一个数组中,将时间存储在另一个数组中(正如我已经在做的那样)。我没有问题操纵日期值我的问题是从函数的一次运行返回结果并将它们放入已经从上一次运行的函数中填充的数组中。
我希望这是有道理的。任何帮助或指导将不胜感激。
答案 0 :(得分:0)
您似乎将日期作为分区键,将时间作为范围键。
选项: