我的DynamoDB表中的项目具有以下格式:
{
'id': 1,
'last_check': 1234556,
'check_interval': 100,
....
}
现在,我想扫描表格,找到last_check + check_interval
小于某个给定值last_check_time
的所有项目。我没有找到一种方法来创建一个结合了两个属性的FilterExpression,因此我目前正在采用以下方式:
last_check_time = time.time()
response = status_table.scan(
ProjectionExpression='id, last_check, check_interval',
FilterExpression = Attr('last_check').lt(last_check_time)
)
# manually filter the items and only preserve those with last_check + check_interval < last_check_time:
for item in response['Items']:
if item['last_check'] + item['check_interval'] < last_check_time:
# This is one of the items I'm interested in!
....
else:
# Not interested in this item. And I'd prefer to let DynamoDB filter this out.
continue
有没有办法让DynamoDB进行过滤,从而使上面的例子中的for循环过时了?
答案 0 :(得分:2)
不幸的是,目前无法请求DynamoDB为您执行过滤计算,但您可以创建另一个属性,即两个属性的总和,并且您有几种方法可以实现这一点;
在将项目写入DynamoDB时,可能会在代码中计算其他属性(last_check + check_interval)。
使用DynamoDB触发器创建其他属性(last_check + check_interval)
您可以使用任一选项在要过滤的项目上创建新属性。