AWS AppSync 解析器中的无效 FilterExpression 语法错误

Invalid FilterExpression Syntax Error in AWS AppSync Resolver

我有以下解析器,用于通过 ID 列表与 IN 运算符的组合获取项目。

{
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
    ## Provide a query expression. **
    "expression": "studentId = :id",
    "expressionValues" : {
        ":id" : { "S": "$ctx.args.studentId" }
    }
},
"filter": {
    "expression": "topicId IN :ids",
    "expressionValues" : {
        ":ids" : { "NS" : $ctx.args.topicIds }
    }
},
"index": "studentId-index",
}

出现以下错误:

{
"data": {
   "listStudentBookmarkedTopics": null
 },
 "errors": [
{
  "path": [
    "listStudentBookmarkedTopics"
  ],
  "data": null,
  "errorType": "DynamoDB:AmazonDynamoDBException",
  "errorInfo": null,
  "locations": [
    {
      "line": 2,
      "column": 3
    }
  ],
  "message": "Invalid FilterExpression: Syntax error; token: \":ids\", near: 
  \"IN :ids\" (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: 
  ValidationException; Request ID: 
   R49QUD5LDF7KS83ABNTPLP10RBVV4KQNSO5AEMVJF66Q9ASUAAJG)"
  }
]
}

您可以尝试将过滤器表达式更改为以下内容吗?

"filter": {
    "expression": "contains(:ids, topicId)",
    "expressionValues" : {
        ":ids" : { "NS" : $util.toJson($ctx.args.topicIds) }
    }
}

这会添加对 $util.toJson 的调用并使用 contains DynamoDB 过滤器表达式。