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

InformationsquelleAutor ben.bourdin | 2014-11-25
Schreibe einen Kommentar