Hi,
This is not a question, but a solution to a problem we were having.
Me and my team wanted to filter a query by comparing a field with different values in a list. Something like this:
query listCars{
listCars(filter:{ car_color: {in: ['red', 'black']}}){
car_name
car_color
}
}
Note the in comparison operator.
We found that the resolver for that filter input was calling a function: toDynamoDBFilterExpression(), for example:
{
"version": "2017-02-28",
"operation": "Scan",
"filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
"limit": $util.defaultIfNull($ctx.args.limit, 20),
"nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}
That function transforms the filter input according to the documentation (https://docs.aws.amazon.com/appsync/latest/devguide/resolver-util-reference.html).
Now Appsync autogenerates code for the TableStringFilterInput, but it doesnt include the in operator. The question is, does this function support this operator?
We found that adding the in operator in the schema is sufficient to make it work:
input TableStringFilterInput {
ne: String
eq: String
le: String
lt: String
ge: String
gt: String
in: [String]
contains: String
notContains: String
between: [String]
beginsWith: String
}
Then we could run the query at the beginning of this post.