【问题标题】:How to get correct amount of items in a single aws graphql query如何在单个 aws graphql 查询中获取正确数量的项目
【发布时间】:2021-10-22 22:49:07
【问题描述】:

这是一个与this one类似的问题,但由于没有人回答,我想看看我是否能得到一些答案。

我开始探索 graphql 和 amplify,因为 firestore 有一些我认为限制了我的应用程序的限制。但是我遇到了这种情况,我想以有限的结果进行查询,结果不是我所期望的。我的数据库只有 13 条记录。而且我每次需要得到 12 个元素。

所以,如果我运行这个查询:

query MyQuery {
  listItems(filter: {type: {eq: "ropa"}}) {
    items {
      price
      status
      type
      id
      name
    }
    nextToken
  }
}

这将返回 4 个类型值等于“ropa”的项目。到目前为止,一切都很好。但是如果我添加一个 12 的限制,像这样:

query MyQuery {
  listItems(filter: {type: {eq: "ropa"}}, limit: 12) {
    items {
      price
      status
      type
      id
      name
    }
    nextToken
  }
}

我只会得到其中的 3 个结果和一个 nextToken,所以我必须再次传递相同的查询,但这次使用 nextToken 值来获得最后一个结果。

据我了解,当您限制结果时,查询首先会获取限制中指定的元素数量并过滤它们以匹配您的查询。

在每次到达列表末尾时我都必须让 12 个元素填满屏幕的情况下,我必须多次调用此查询,并且必须设计一种解决方法来填充临时列表,所以当它达到 12 个项目,然后我将它们推入我的数组,依此类推。如果我添加排序方向或其他过滤器,结果会减少,并且在我看来,过程变得更加复杂和低效。

这是唯一的方法吗?

【问题讨论】:

    标签: graphql amazon-dynamodb aws-amplify


    【解决方案1】:

    我不确定你如何连接 graphql 和 dynamodb,所以我无法对此发表评论。

    但是,根据您构建发电机表的方式,您必须遵守以下严格限制:

    • 可以按分区键和排序键查询。
    • 您必须指定分区键
    • 您可以对排序键进行一些有限的动态查询,例如 begin_with、大于/小于等。

    如果你需要做额外的过滤,你不能在 Dynamo 中做那个“服务器端”。因此,在您的 dynamodb 表与您的访问模式不完全匹配的情况下,您需要获取一堆额外的数据到客户端并在那里进行过滤。

    如果这变得繁琐和缓慢,您需要重新设计您的表,使其更适合您的访问模式,并使您能够在查询的 PK/SK 过滤端做更多的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2021-08-09
      • 2018-06-19
      • 2023-03-30
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多