gpt4 book ai didi

GatsbyJS 中的 GraphQL 过滤器

转载 作者:行者123 更新时间:2023-12-03 21:20:39 26 4
gpt4 key购买 nike

我无法理解如何在 GatsbyJS 中为 GraphQL 查询编写过滤器。

这有效:

filter: { contentType: { in: ["post", "page"] }

我基本上需要相反的,比如:
filter: { "post" in: { contentTypes } } // where contentTypes is array

这不起作用,因为“需要NAME”(在我的示例中是“post”)。

经过 GatsbyJS docs我找到了这个:
elemMatch: short for element match, this indicates that the field you are filtering will return an array of elements, on which you can apply a filter using the previous operators

filter:{
packageJson:{
dependencies:{
elemMatch:{
name:{
eq:"chokidar"
}
}
}
}
}

伟大的!这就是我需要的!所以我尝试这样做,我得到:
error GraphQL Error Field "elemMatch" is not defined by type markdownRemarkConnectionFrontmatterTagsQueryList_2.

markdownRemarkConnectionFrontmatterTagsQueryList_2 中定义的关键字是:
  • eq: 字符串 |空值;
  • ne: 字符串 |空值;
  • 正则表达式:字符串 |空值;
  • glob: 字符串 |空值;
  • 在:阵列 |空值;

  • elemMatch等更多关键字时,为什么我仅限于这些关键字文档中有提到吗?为什么我不允许使用过滤器结构“element in: { array }”?

    如何创建此过滤器?

    最佳答案

    按数组中的值过滤

    假设您有一个带有 categories 的 Markdown 博客作为字符串数组,您可以过滤带有“历史”的帖子 categories像这样:

    {
    allMarkdownRemark(filter:{
    frontmatter:{
    categories: {
    in: ["historical"]
    }
    }
    }) {
    edges {
    node {
    id
    frontmatter {
    categories
    }
    }
    }
    }
    }

    您可以在 Gatsby.js docs 中的任何 graphiq 块中尝试此查询。 .

    元素匹配

    我想 elemMatch仅对具有对象数组的字段“打开”;类似 comments: [{ id: "1", content: "" }, { id: "2", content: ""}] .这样,您可以对每个 comment 的字段应用更多过滤器。 :
    comments: { elemMatch: { id: { eq: "1" } } }

    这是您可以在 gatsby 文档中的 graphiq 块中尝试的示例:
    // only show plugins which have "@babel/runtime" as a dependency
    {
    allSitePlugin (filter:{
    packageJson:{
    dependencies: {
    elemMatch: {
    name: {
    eq: "@babel/runtime"
    }
    }
    }
    }
    }) {
    edges {
    node {
    name
    version
    packageJson {
    dependencies {
    name
    }
    }
    }
    }
    }
    }

    关于GatsbyJS 中的 GraphQL 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414395/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com