基于主键从Lambda检索dynamoDB中的行?

时间:2017-07-24 23:29:51

标签: node.js amazon-web-services amazon-dynamodb aws-lambda

以下是我的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表格图片。

enter image description here

1 个答案:

答案 0 :(得分:0)

KeyConditionExpression内不能有多个条件。您可以使用FilterExpressionKeyConditionExpression来缩小结果集范围。

引自documentation

  

使用KeyConditionExpression参数提供特定值   对于分区键。 Query操作将返回所有   具有该分区键值的表或索引中的项。您可以   通过指定a,可以选择缩小Query操作的范围   在KeyConditionExpression中对键值和比较运算符进行排序。至   进一步细化查询结果,您可以选择提供一个   FilterExpression。 FilterExpression确定了哪些项目   结果应该归还给你。所有其他结果都是   丢弃。

同样对于测试,仅支持的分区键测试是相等。其他条件可以应用于排序键。

partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval

另一种方法是创建支持进一步查询的GSI。顺便说一下,传统的RDBMS思想在DynamoDB上效果不佳。您可以阅读有关最佳做法的here