Wcześniej w tym roku Amazon announced obsługa filtrów zapytań w atrybutach innych niż kluczowe.AWS DynamoDB - łączenie wielu filtrów zapytań na jednym, nie kluczowym atrybucie w java
Czy warunki można łączyć na jednej wartości atrybutu? Na przykład w tym scenariuszu chciałbym pobrać wszystkie elementy, które nie pasują do pewnej listy wartości w pojedynczej kolumnie "bez klucza".
Ich dokumentacja stwierdza, że każdy warunek może zawierać tylko jedną wartość atrybutu dla porównań, takich jak NOT_EQUALS
lub BEGINS_WITH
. W związku z tym następuje nie działa:
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);
Wygląda na to tylko operatora IN
porównania może zawierać listę wartości atrybutów. Idealnie te warunki powinny być przenośne? Ponieważ filtr zapytania znajduje się mapa hash nie możemy umieścić wiele warunków na tej samej kolumnie (próbowałem):
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);
Każda pomoc lub wyjaśnienie byłoby bardzo mile widziane!
Dzięki
Dziękujemy za poświęcenie czasu na opublikowanie odpowiedzi na swoje pytanie –