【问题标题】:Query does not return some items from DynamoDB via GraphQL查询不会通过 GraphQL 从 DynamoDB 返回某些项目
【发布时间】: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。可能是某种类型的问题。

标签: graphql amazon-dynamodb aws-appsync


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 2019-08-02
    • 2018-08-19
    • 1970-01-01
    • 2020-07-21
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多