如何使用Lambda和DynamoDB在date范围之间扫描?

我正在尝试使用节点Lambda函数在date范围之间扫描。 我有正确的数据被扫描,但我似乎无法让dateexpression式正常工作。

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); }); }; 

这目前不会尝试返回一个范围,它只是看着一个单一的date。 直到我知道这是行得通的时候,我才想添加一个andexpression式。

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组合是相当陌生的,所以我可能会把它完全设置错误,但这是我通过研究完成的。

我最终想要实现的是开始date和结束date,并返回其中包含date范围的所有DynamoDB文档。 任何帮助将不胜感激。

首先,扫描操作是正确的。 应该在循环中执行LastEvaluatedKey直到LastEvaluatedKey不可用。 请参考这个博客 。

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

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

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

之间运营商样品: –

 FilterExpression: "start_date BETWEEN :date1 and :date2"