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
質問済み 5年前578ビュー
2回答
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.

回答済み 5年前
0

marked thread as answered

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

Chagui
回答済み 4年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ