查询不会通过 GraphQL 从 DynamoDB 返回某些项目
Posted
技术标签:
【中文标题】查询不会通过 GraphQL 从 DynamoDB 返回某些项目【英文标题】:Query does not return some items from DynamoDB via GraphQL 【发布时间】:2021-09-14 03:26:28 【问题描述】:请问 GraphQL 无法获取 DynamoDB 中的项目的原因是什么?
通过 DynamoDB 控制台界面搜索时,我可以轻松查看和查询其中的项目,但在 GraphQL 中使用后,有些项目没有显示。请注意,这不是连接问题,因为我可以查询项目,只要有特定项目未返回。
例如,如果我查询所有帖子,它将返回数组中的所有帖子,但该项目没有显示在那里。但是,当我尝试仅通过 ID 定位帖子来查询帖子时,它运行良好。
无效的示例代码:
listPosts(filter: groupID: eq: "25")
items
id
content
但是当我这样做时,它运行良好:
getPost(id: "c59ce7e9")
id
content
【问题讨论】:
如果它正在提供除一个特定项目之外的其他数据。然后这是发电机数据库方面的问题。可能您可以仔细检查存储在 db 中的该项目的 groupid。可能是某种类型的问题。 【参考方案1】:我遇到了同样的问题,可以分享我发现并为我工作的内容。
列表操作的默认解析器有一个限制:20 内置。
"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)),
我想你可以改变这个,或者你可以像这样向你的查询添加一个限制过滤器:
listPosts(filter: groupID: eq: "25", limit:100)
items
id
content
限制应该高于记录数。
您可以看到这将是一个问题,因为它正在使用扫描操作,这意味着它会检查每条记录是否匹配。这会损害性能。您可以添加分页,或者您应该为此制作一个查询。您将需要研究分页、关系和连接。
https://docs.aws.amazon.com/appsync/latest/devguide/designing-your-schema.html#advanced-relations-and-pagination
【讨论】:
以上是关于查询不会通过 GraphQL 从 DynamoDB 返回某些项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个 API 调用中多次使用相同的 GraphQL 查询。放大,DynamoDB
AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API
具有“自定义类型”属性的DynamoDB表的Graphql Mutation查询