查询不会通过GraphQL从DynamoDB返回某些项



请问是什么原因导致DynamoDB中的项没有被GraphQL提取?

当通过DynamoDB控制台界面进行搜索时,我可以很容易地看到并查询其中的项目,但一旦在GraphQL中使用,一些项目就不会显示。请注意,这不是连接问题,因为我可以查询项目——只是有一个特定的项目没有返回。

例如,如果我查询所有帖子,它将返回数组中的所有帖子,但该项目没有显示在那里。然而,当我试图通过ID来查询Post时,它运行得很好。

不起作用的示例代码:

listPosts(filter: {groupID: {eq: "25"}}) {
items {
id
content
}
}

但当我这样做的时候,它运行得很好:

getPost(id: "c59ce7e9") {
id
content
}

我遇到了同样的问题,可以分享我的发现和工作。

列表操作的默认解析器有一个限制:内置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-关系和分页

最新更新