ben*_*din 10 java amazon-web-services nosql amazon-dynamodb
今年早些时候,亚马逊宣布支持非关键属性的查询过滤器.
条件可以组合在一个属性值上吗?例如,在这种情况下,我想检索与单个"非键"列中的某个值列表不匹配的所有项目.
他们的文档说明每个条件只能包含一个属性值,用于比较NOT_EQUALS或BEGINS_WITH.因此以下不起作用:
HashMap<String, Condition> queryFilter = new HashMap<String, Condition>();
List<AttributeValue> AttributeValues = new ArrayList<AttributeValue>();
AttributeValues.add(new AttributeValue().withS("someValue1"));
AttributeValues.add(new AttributeValue().withS("someValue2"));
Condition attributeCondition = new Condition()
.withComparisonOperator(ComparisonOperator.NE)
.withAttributeValueList(AttributeValues);
queryFilter.put("COLUMN_1", attributeCondition);
DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()
.withHashKeyValues(itemKey)
.withQueryFilter(queryFilter)
.withLimit(pPageSize);
Run Code Online (Sandbox Code Playgroud)
看起来只有IN比较运算符才能包含属性值列表.理想情况下,这些条件应该是可链接的?由于查询过滤器是一个哈希映射,我们不能在同一列上放置多个条件(我已尝试过):
Condition c1 = new Condition()
.withAttributeValueList(new AttributeValue().withS("someValue1"))
.withComparisonOperator(ComparisonOperator.NE);
Condition c2 = new Condition()
.withAttributeValueList(new AttributeValue().withS("someValue2"))
.withComparisonOperator(ComparisonOperator.NE);
DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()
.withHashKeyValues(itemKey)
.withConditionalOperator(ConditionalOperator.AND)
.withQueryFilterEntry("COLUMN_1", c1)
.withQueryFilterEntry("COLUMN_1", c2)
.withLimit(pPageSize);
Run Code Online (Sandbox Code Playgroud)
任何帮助或澄清将不胜感激!
谢谢
ben*_*din 18
事实证明这是通过向查询添加FilterExpression实现的(最近在此博客文章中介绍)
我在DynamoDB文档中看到过这个,但没有升级到最新的AWS Java SDK :(
使用我上面的例子,这看起来像:
Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
expressionAttributeValues.put(":val1", new AttributeValue().withS("someValue1"));
expressionAttributeValues.put(":val2", new AttributeValue().withS("someValue2"));
DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()
.withHashKeyValues(itemKey)
.withFilterExpression("COLUMN_1 <> :val1 AND COLUMN_1 <> :val2")
.withExpressionAttributeValues(expressionAttributeValues)
.withLimit(pPageSize);
Run Code Online (Sandbox Code Playgroud)
感谢AWS支持!
| 归档时间: |
|
| 查看次数: |
16058 次 |
| 最近记录: |