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
posta 5 anni fa578 visualizzazioni
2 Risposte
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.

con risposta 5 anni fa
0

marked thread as answered

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

Chagui
con risposta 4 anni fa

Accesso non effettuato. Accedi per postare una risposta.

Una buona risposta soddisfa chiaramente la domanda, fornisce un feedback costruttivo e incoraggia la crescita professionale del richiedente.

Linee guida per rispondere alle domande