是否可以过滤 python 中的 DynamoDB 查询结果?

Is it possible to filter a DynamoDB query result in python?

我的数据格式如下所示

{
  ID:'some uuid'
  Email:'some@email.com',
  Tags=[tag1,tag2,tag3...],
  Content:' some content'
}

分区键是ID,排序键是Email 我创建了一个电子邮件的二级索引,如果我只想通过电子邮件查询,它是“email_index”, 现在我想通过电子邮件和特定标签查询数据 例如我想找到 Email='some@email.com' 和 Tags 包含 'tag2' 的所有数据, 我想先查询“email_index”

result=table.query(
            IndexName='EmailIndex',
            KeyConditionExpression='Email=:email',
            ExpressionAttributeValues={
                ':email':'some@email.com'
            }
)['Items']

然后用Attr('Tags').contains('tag2')扫描结果 那么有没有可能同时做这两件事呢?或者我必须写一个循环来过滤 Python?

中的查询结果

标签可能是 DynamoDB 的一个棘手用例。

一种选择是在您的查询操作中使用 FilterExpression

result=table.query(
            IndexName='EmailIndex',
            KeyConditionExpression='Email=:email',
            FilterExpression: 'contains(Tags, :tag)',
            ExpressionAttributeValues={
                ':email':'some@email.com',
                ':tag': 'tag1'
            }
)['Items']

如您所述,另一种选择是在您的应用程序代码中进行检查。

如果这对于您的用例来说不够灵活,您可能需要研究更强大的搜索解决方案,例如 Elasticsearch。