在FilterExpression中传递包含的搜索字符串列表

时间:2018-01-17 15:59:17

标签: amazon-dynamodb boto3

有没有办法在DynamoDb的FilterExpression的contains()方法中传递搜索字符串列表?

如下所示:

search_str = ['value-1', 'value-2', 'value-3']
result = kb_table.scan(
            FilterExpression="contains (title, :titleVal)", 
            ExpressionAttributeValues={ ":titleVal": search_str }
        )

现在我只能想到循环遍历列表并多次扫描表(如下面的代码所示),但我认为它会耗费大量资源。

for item in search_str:
    result += kb_table.scan(
            FilterExpression="contains (title, :titleVal)", 
            ExpressionAttributeValues={ ":titleVal": item }
        )

任何建议。

1 个答案:

答案 0 :(得分:4)

对于上述情况,CONTAINS应与OR条件一起使用。当您将数组作为CONTAINS的输入时,DynamoDB将检查SET属性(" SS"," NS"或" BS")。它不会在字符串属性上查找子序列。

  

如果比较的目标属性是String类型,那么   运算符检查子字符串匹配。如果是目标属性的话   比较是Binary类型,然后运算符查找a   与输入匹配的目标的子序列。如果是目标   比较的属性是一组(" SS"," NS"或" BS"),然后是   如果运算符与任何成员完全匹配,则求值为true   集合。

示例: -

movies1 = "MyMovie"
movies2 = "Big New"
fe1 = Attr('title').contains(movies1)
fe2 = Attr('title').contains(movies2)

response = table.scan(
        FilterExpression=fe1 or fe2        
    )