Filters, IN comparison operator, toDynamoDBFilterExpression()

0

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.

Chagui
feita há 5 anos578 visualizações
2 Respostas
0

Thank you for the investigation. If you would like to make this change permanent I know the team is happy to review PRs. It looks like your change could be made permanent if added to the logic rooted here: https://github.com/aws-amplify/amplify-cli/blob/00ed819419a4959a6d62da2fc5477621c046eff0/packages/graphql-dynamodb-transformer/src/definitions.ts#L437.

respondido há 5 anos
0

marked thread as answered

Edited by: Chagui on May 27, 2020 9:29 AM

Chagui
respondido há 4 anos

Você não está conectado. Fazer login para postar uma resposta.

Uma boa resposta responde claramente à pergunta, dá feedback construtivo e incentiva o crescimento profissional de quem perguntou.

Diretrizes para responder a perguntas