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 过滤器表达式。
我有以下解析器,用于通过 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 过滤器表达式。