【问题标题】:Retrieving rows from dynamoDB from Lambda based on primary key?基于主键从 Lambda 从 dynamoDB 中检索行?
【发布时间】:2017-07-25 12:06:30
【问题描述】:

下面是我的 Lambda 函数的代码。我无法根据时间戳查询行。我的计划是以毫秒为单位获取从当前时间前 5 秒到当前时间的所有行。 TimeMillis(Number) 以毫秒为单位存储当前时间,它是主键,范围键是 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 表图像。

【问题讨论】:

  • 您遇到什么错误??
  • 错误显示为:_"errorMessage": "KeyConditionExpressions must only contain one condition per key"_
  • 如果我用以下代码替换上面的代码:KeyConditionExpression: "TimeMillis BETWEEN :from AND :to", ExpressionAttributeValues: { ":from" : timemillis1, ":to" : timemillis }。显示的错误是:**"errorMessage": "Query key condition not supported"**
  • 是否有任何解决方案可以通过对主键使用 BETWEEN 条件(在本例中为 TimeMillis)来使用和获取行,或者您能否提出任何建议如果可能的话,如何克服这种情况的替代解决方案?
  • 我已经添加了答案

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


【解决方案1】:

KeyConditionExpression 中不能有多个条件。您可以做的是使用FilterExpressionKeyConditionExpression 来缩小结果集。

引自documentation

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

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

partitionKeyName = :partitionkeyval AND sortKeyName = :sortkeyval

另一种方法是创建一个支持进一步查询的 GSI。顺便说一句,传统的 RDBMS 思想不适用于 DynamoDB。你可以阅读最佳实践here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多