All'inizio di quest'anno Amazon announced supporto di filtri di query su attributi non chiave.AWS DynamoDB - combinazione di più filtri di query su un singolo attributo non chiave in java
Le condizioni possono essere combinate su un singolo valore di attributo? Ad esempio, in questo scenario vorrei recuperare tutti gli elementi che non corrispondono ad un certo elenco di valori in una singola colonna 'non chiave'.
La documentazione specifica che ogni condizione può contenere solo un valore di attributo per confronti come NOT_EQUALS
o BEGINS_WITH
. Di seguito, pertanto non funziona:
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);
Sembra che solo l'operatore IN
confronto può contenere un elenco di valori di attributo. Idealmente queste condizioni dovrebbero essere concatenate? Dal momento che il filtro di query è una mappa di hash non possiamo mettere più condizioni sulla stessa colonna (ho provato):
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);
Qualsiasi aiuto o chiarimento sarebbe molto apprezzato!
Grazie
Grazie per aver dedicato del tempo per pubblicare una risposta alla tua domanda –