以下是我的Lambda函数的代码。我根据时间戳查询行时遇到问题。我的计划是将所有行从当前时间之前的5秒到当前时间(以毫秒为单位)。 TimeMillis(Number)以miiliseconds存储当前时间,它是主键,范围键是PhoneId(String)。请帮我解决问题,或者有什么办法可以解决这个问题吗?
我无法获得输出,这是投掷错误。
'use strict';
var AWS = require("aws-sdk");
AWS.config.update({
region: "us-east-1",
});
var docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context, callback) {
var timemillis = new Date().getTime();
var timemillis1 = timemillis - 5000;
var params = {
TableName: 'Readings',
KeyConditionExpression: "TimeMillis = :tm and TimeMillis BETWEEN :from AND :to",
ExpressionAttributeValues: {
":tm" : "TimMillis",
":from" : timemillis1,
":to" : timemillis
}
};
docClient.query(params, function(err, data) {
if(err){
callback(err, null);
}
else{
callback(null, data);
}
});
};
这是我的DynamoDB表格图片。
答案 0 :(得分:0)
KeyConditionExpression
内不能有多个条件。您可以使用FilterExpression
和KeyConditionExpression
来缩小结果集范围。
使用KeyConditionExpression参数提供特定值 对于分区键。 Query操作将返回所有 具有该分区键值的表或索引中的项。您可以 通过指定a,可以选择缩小Query操作的范围 在KeyConditionExpression中对键值和比较运算符进行排序。至 进一步细化查询结果,您可以选择提供一个 FilterExpression。 FilterExpression确定了哪些项目 结果应该归还给你。所有其他结果都是 丢弃。
同样对于测试,仅支持的分区键测试是相等。其他条件可以应用于排序键。
partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval
另一种方法是创建支持进一步查询的GSI。顺便说一下,传统的RDBMS思想在DynamoDB上效果不佳。您可以阅读有关最佳做法的here。