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
preguntada hace 5 años578 visualizaciones
2 Respuestas
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 hace 5 años
0

marked thread as answered

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

Chagui
respondido hace 4 años

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas