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

Tom*_*lan 5 amazon-web-services node.js 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);
    });
};
Run Code Online (Sandbox Code Playgroud)

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

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

{
    "end_date": {
        "S": "2016-12-02"
    },
    "name": {
        "S": "Name of document"
    },
    "start_date": {
        "S": "2016-10-10"
    },
    "document_id": {
        "N": "7"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

not*_*est 8

首先,扫描操作是正确的.本dynamodb.scan应在一个循环,直到被执行LastEvaluatedKey不可用.请参考此博客.

因为这将拉姆达没有返回结果没有发现在第一次扫描的数据.如果您可以扩展扫描直到LastEvaluatedKey不可用,则lambda可能会返回结果.

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

如果查询或扫描匹配值超过1 MB数据的特定属性,则需要对下一个1 MB数据执行另一个查询或扫描请求.为此,请从上一个请求中获取LastEvaluatedKey值,并在下一个请求中将该值用作ExclusiveStartKey.此方法将允许您以1 MB为增量逐步查询或扫描新数据.

BETWEEN运营商样本: -

FilterExpression: "start_date BETWEEN :date1 and :date2"
Run Code Online (Sandbox Code Playgroud)