[英]Using contains filter in DynamoDB scan with Java
假设我有一个有效的查询,例如:
ScanRequest scanRequest = new ScanRequest()
.withTableName("myTable")
.withFilterExpression("attr1 = :val1 and attr2 = :val2")
.withExpressionAttributeValues(vm) //contains values for :val1 and :val2
.withLimit(PAGE_SIZE)
.withConsistentRead(READ_TYPE);
现在我想扩展这个扫描。 假设我的表还有一个attr3属性,其格式如下:
"attr3": {
"S": "AAA BBB CCC DDD"
}
如何过滤attr3包含AAA的元素? 还是AAA和BBB?
DynamoDB 条件表达式参考文档是您的朋友!
在您的特定情况下,您可以使用contains函数来搜索子字符串。 您的过滤器表达式可能如下所示:
"attr1 = :val1 and attr2 = :val2 and (contains(attr3, :val3a) or contains(attr3, :val3b))"
// where :val3a and :val3b are value placeholders for say AAA and BBB
但我怀疑你想要实现的东西比DynamoDB过滤器在服务器端处理的要复杂一些,所以你有两个选择:
在任何一种情况下,您都应该知道,在网络带宽方面,使用过滤器的扫描仅比常规扫描更有效(在过滤器排除大多数结果的情况下)。 但就容量消耗而言,无论是否使用过滤器,扫描都同样昂贵。 所以,如果你可以避免它,不要过分依赖扫描你的桌子!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.