【发布时间】:2014-11-25 20:07:43
【问题描述】:
今年早些时候,Amazon announced 支持对非关键属性的查询过滤器。
可以在单个属性值上组合条件吗?例如,在这种情况下,我想检索与单个“非键”列中某个值列表不匹配的所有项目。
他们的文档指出,每个条件只能包含一个属性值,以便进行比较,例如 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);
看起来只有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);
任何帮助或澄清将不胜感激!
谢谢
【问题讨论】:
标签: java amazon-web-services amazon-dynamodb nosql