有没有办法在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 }
)
任何建议。
答案 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
)