AWS DynamoDB - Kombination von mehreren Abfrage-Filter auf einem einzigen nicht-Schlüssel-Attribut in java
Früher in diesem Jahr Amazon angekündigt Unterstützung der Abfrage-Filter auf nicht-Schlüssel-Attribute.
Können Bedingungen kombiniert werden, die auf ein einzelnes Attribut-Wert? Zum Beispiel, in diesem Szenario möchte ich alle Elemente abzurufen, die mit einer bestimmten Liste von Werten in einer einzigen 'nicht-Schlüssel' - Spalte.
Ihre Dokumentation besagt, dass jede Bedingung jeweils nur ein Attributwert für Vergleiche wie NOT_EQUALS
oder BEGINS_WITH
. 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);
Sieht es aus wie nur der IN
Vergleich Bediener kann eine Liste der Attribut-Werte. Idealerweise sollten diese Bedingungen werden verkettbare? Da der Abfrage-filter ist ein hash-map-wir können nicht mehrere Bedingungen in der gleichen Spalte (die ich ausprobiert habe):
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);
Jede Hilfe oder Klärung wäre sehr dankbar!
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
So stellt sich heraus, dies ist möglich durch hinzufügen eines FilterExpression der Abfrage (jüngst eingeführt in diesem blog-post)
Hatte ich gesehen, das in der DynamoDB-Dokumentation aber noch nicht aktualisiert auf die neueste AWS Java SDK 🙁
Mit meinem oben genannten Beispiel würde dies so Aussehen:
Dank AWS Support!