为什么这个 GraphQL Contentful 查询太复杂了?

问题描述 投票:0回答:0

我在对 Contentful 的 GraphQL 查询中收到以下错误消息,但不明白为什么。

错误信息:

“无法执行查询。查询的最大允许复杂度 是 11000 但它是 12100。简化查询,例如通过设置较低 集合限制。”

查询:

query ClassCollection(
  $slug: String
  $limit: Int
) {
  classCollection(
    where: { slug: $slug }
    limit: $limit
  ) {
    items {
      slug
      title
      linkedFrom {
        courseCollection {
          items {
            slug
          }
        }
      }
      filesCollection {
        items {
          title
          asset {
            title
            fileName
            url
            width
            height
            contentType
          }
        }
      }
    }
  }
}

内容模型:

  • 课程
    • 一个course包含一个指向一个或多个classes
    • 的参考字段
    • 这在内容模型中仅限于 MAX 10 类
  • 班级
    • A class 包含指向一个或多个 files
    • 的引用字段
    • 在内容模型中,这仅限于 MAX 10 个文件

注意事项

  • 鉴于 Contentful 中设置的限制,查询不应该很深/很复杂。
  • 我在 Contentful 中只有几个条目

问题

为什么我会收到该错误消息,我该如何解决?

我试过的

  • 我可以限制查询结果的数量,但这并不能解决根本问题。无论如何,查询在 50 左右的限制下就变得太复杂了。这太少了。
  • 因为我想弄清楚每个class来自什么course,我可以只提取所有课程和所有类(这不是太复杂),然后基于 slugs 在 JavaScript 中进行快速数组过滤.但是,直接在查询中执行它会好得多。 这是一个链接,显示 Contentful 为此目的推荐 linkedFrom 字段。

编辑:计算查询复杂度

  1. 为了便于计算,假设我们将类数限制为 100。因此,最多 100 个类。
  2. 那么,由于每门课程最多包含10节课,所以最多可以返回1000门课程。我实际上不确定这个。它必须查看每门课程,并找到班级,最多应查找 1,000 次。
  3. 每个类最多只能有 10 个文件,这里也给了我们 1,000 的复杂性。
  4. 最大复杂度为 2,100。我显然错了,因为错误消息说复杂度是 12,100。知道我错过了什么吗?
javascript graphql contentful
© www.soinside.com 2019 - 2024. All rights reserved.