我正在尝试使用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文档。任何帮助将不胜感激。
答案 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"