Anfang dieses Jahres Amazon announced Unterstützung von Abfrage-Filter für Nicht-Schlüsselattribute.AWS DynamoDB - Kombinieren mehrerer Abfragefilter für ein einzelnes Nicht-Schlüsselattribut in Java
Können Bedingungen für einen einzelnen Attributwert kombiniert werden? In diesem Szenario möchte ich beispielsweise alle Elemente abrufen, die nicht mit einer bestimmten Werteliste in einer einzelnen Nicht-Schlüssel-Spalte übereinstimmen.
Ihre Dokumentation besagt, dass jede Bedingung nur einen Attributwert für Vergleiche wie NOT_EQUALS
oder BEGINS_WITH
enthalten kann. Im Folgenden daher nicht funktioniert:
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);
Es sieht aus wie nur der IN
Vergleichsoperator eine Liste von Attributwerten halten kann. Idealerweise sollten diese Bedingungen kettenfähig sein? Da die Abfragefilter eine Hash-Karte ist, können wir nicht mehrere Bedingungen auf der gleichen Spalte setzen (ich habe versucht):
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);
Hilfe oder Klärung wäre sehr dankbar!
Dank
Vielen Dank, dass Sie sich die Zeit genommen haben, eine Antwort auf Ihre Frage zu schreiben –