如何使用Lambda和DynamoDB在日期范围之间进行扫描?

时间:2016-11-02 21:48:42

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

我正在尝试使用Node Lambda函数在日期范围之间进行扫描。我正确地扫描了数据,但我似乎无法使日期表达式正常工作。

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = function(event, context) {
    var tableName = "MyDDBTable";
    dynamodb.scan({
        TableName : tableName,
        FilterExpression: "start_date < :start_date",
        ExpressionAttributeValues: {
            ":start_date": {
                "S": "2016-12-01"
            }
        }
    }, function(err, data) {
        context.succeed(data);
    });
};

目前这不会尝试在一个范围之间返回,它现在只是查看一个日期。我不想在表达式中添加and,直到我知道它有效。

我的DynamoDB中的示例文档结构如下:

{
    "end_date": {
        "S": "2016-12-02"
    },
    "name": {
        "S": "Name of document"
    },
    "start_date": {
        "S": "2016-10-10"
    },
    "document_id": {
        "N": "7"
    }
}

document_id是我的主键。我对这整个Lamdba / DynamoDB组合都很陌生,所以我可能完全错误,但这是我通过我的研究设法完成的。

我最终要尝试实现的是开始日期和结束日期,返回日期范围内的所有DynamoDB文档。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

首先,扫描操作是正确的。 dynamodb.scan应该循环执行,直到LastEvaluatedKey不可用。请参阅此blog

lambda没有返回结果,因为它会在第一次扫描中找到数据。如果您可以扩展扫描直到LastEvaluatedKey不可用,则lambda可能会返回结果。

  

对于查询和扫描操作,DynamoDB会计算数量   根据项目大小而不是金额消耗预配置吞吐量   返回给应用程序的数据。

     

如果查询或扫描与值匹配的特定属性   如果数据超过1 MB,则需要执行另一个查询   或扫描请求下一个1 MB的数据。要做到这一点,请采取   来自上一个请求的LastEvaluatedKey值,并使用该值   作为下一个请求中的ExclusiveStartKey。这种方法会让   您以1 MB为增量逐步查询或扫描新数据。

BETWEEN运营商示例: -

FilterExpression: "start_date BETWEEN :date1 and :date2"