我有一个用户表,其主要哈希键为userId。每个用户可能/可能没有名为" environment"的字符串属性。 我想让所有拥有" environment" =" xyz"或者没有"环境"属性。
以下代码将使用environment = xyz过滤这些用户,但如何过滤那些没有环境的项目? Dynamo API不允许过滤空字符串。
AmazonDynamoDBClient client = DbClientManager.getDynamoDbClient();
ArrayList<AttributeValue> avList = new ArrayList<AttributeValue>();
avList.add(new AttributeValue().withS("xyz"));
Condition scanFilterCondition = new Condition()
.withComparisonOperator(ComparisonOperator.EQ.toString())
.withAttributeValueList(avList);
Map<String, Condition> conditions = new HashMap<>();
conditions.put("environment", scanFilterCondition);
ScanRequest scanRequest = new ScanRequest()
.withTableName("users")
.withAttributesToGet(
"userId",
"environment");
.withScanFilter(conditions);
ScanResult result = client.scan(scanRequest);
现在我刚刚删除了扫描过滤器,我在客户端进行过滤。有没有办法在服务器端做这个?
谢谢, 阿里扎
答案 0 :(得分:5)
希望我不会太迟。 我找到了你可以在查询中使用的有用函数。我没有检查ScanRequest,但QueryRequest是魅力。
QueryRequest queryRequest = new QueryRequest()
.withTableName("YouTableName")
queryRequest.setFilterExpression(" attribute_not_exists(yourAttributeName) ")
queryRequest.setExpressionAttributeValues(expressionAttributeValues)
queryRequest.setExclusiveStartKey(ifYouHave)
queryRequest.setSelect('ALL_ATTRIBUTES')
queryRequest.setExpressionAttributeNames(youNames)
attribute_not_exists(yourAttributeName)与“:aws-sdk:1.11.11”一起使用 你也可以使用attribute_exists(yourAttributeName)
答案 1 :(得分:0)
您需要使用NULL
ComparisonOperator。
点击此链接:http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
这对你有用吗?
答案 2 :(得分:0)
我的情况也是如此,attribute_not_exists(attribute)起作用了。您可以参考以下问题:-How to check whether an attribute is not present in dynamoDB filter expression
了解更多详情。