Supposons que j'ai une requête de travail telle que:
ScanRequest scanRequest = new ScanRequest()
.withTableName("myTable")
.withFilterExpression("attr1 = :val1 and attr2 = :val2")
.withExpressionAttributeValues(vm) //contains values for :val1 and :val2
.withLimit(PAGE_SIZE)
.withConsistentRead(READ_TYPE);
Maintenant, je voudrais étendre cette analyse. Supposons que ma table ait également un attribut attr3 qui a la forme:
"attr3": {
"S": "AAA BBB CCC DDD"
}
Comment puis-je filtrer les éléments dont attr3 contient AAA? Ou AAA et BBB?
Le DynamoDB documentation de référence des expressions de condition est votre ami!
Dans votre cas spécifique, vous pouvez utiliser la fonction contient pour rechercher une sous-chaîne. Votre expression de filtre pourrait ressembler à ceci:
"attr1 = :val1 and attr2 = :val2 and (contains(attr3, :val3a) or contains(attr3, :val3b))"
// where :val3a and :val3b are value placeholders for say AAA and BBB
Mais je soupçonne que ce que vous voulez réaliser est un peu plus sophistiqué que ce qui peut être géré côté serveur par les filtres DynamoDB, vous avez donc deux options:
Dans les deux cas, vous devez savoir qu'une analyse avec des filtres n'est que plus efficace qu'une analyse régulière en termes de bande réseau (dans le cas où la plupart des résultats sont exclus par le filtre). Mais en termes de capacité consommée, un Scan est tout aussi cher avec ou sans filtres. Donc, si vous pouvez l'éviter, ne comptez pas trop sur votre table!