json - Gatsbyjs 中的 GraphQL - 仅返回包含特定字段的数据

标签 json graphql gatsby graphql-js

我在 GatsbyJs 框架中使用 GraphQL。

我有多个包含 JSON 数据的文件。数据结构与此类似:

{
 ...,
 "sections" / "menuSections"
}

最后一个字段可以是每个文件中的“sections”或“menuSections”。我当前的 graphQL 查询如下所示:
{
  allDataJson {
    nodes {
      menuSections
    }
  }
}

此查询返回正确的“menuSections”,但是,没有“menuSections”的数据文件将返回为 null .如何让 GraphQL 仅返回包含“menuSections”的文件中的数据,即如何返回存在“menuSections”的数据。我正在寻找像 $exists 这样的运算符(operator).

最佳答案

如果 sections & menuSections 是字符串或字符串数​​组,也许你可以过滤 null :

{
  "menuSections": "..."
}
// query
{
  allDataJson(filter: {
    menuSections: {
      ne: null
    }
  }) {
    nodes {
      menuSections
    }
  }
}

如果它们是对象,您仍然可以过滤 null ,但它必须应用于该对象内的一个字段。如果您的对象没有公共(public)字段,这将不起作用:
{
  "menuSections": {
    "menuSectionField": "..."
  }
}
// query
{
  allDataJson(filter: {
    menuSections: {
      menuSectionField: {
        ne: null
      }
    }
  }) {
    nodes {
      menuSections
    }
  }
}

如果它们是对象数组,您可以做同样的事情,但使用 elemMatch :
{
  "menuSections": [
    { "menuSectionField": "..." },
    { "other": "..." }
  ]
}
// query
allDataJson(filter: {
    menuSections: {
      elemMatch: {
        menuSectionField: {
          ne: null
        }
      }
    }
  }) { ... }

最坏的情况最坏的情况,我认为您可能能够定义某种自定义类型来确保 menuSections 的存在,以便您可以查询 allDataWithMenuSections等等,但如果过滤器有效,它就会简单得多。

关于json - Gatsbyjs 中的 GraphQL - 仅返回包含特定字段的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55607812/

相关文章:

java - 如何从 Java 应用程序调用 GraphQL 端点

javascript - 如何加载 JSON 数组以使用 Angular-Translate 翻译 AngularJS 网页

javascript - 有人可以解释 JSON 解析器如何在不使用 eval 的情况下工作吗?

jquery - DataTables自定义下拉日期过滤器

javascript - Apollo 中的 GraphQL 架构存在问题

postgresql - 将 Gatsby 与 Postgres 连接起来

gatsby - 使用 markdown 在 Gatsby Layout 组件中动态添加页面元

reactjs - google 域上 netlify 的 DNS 设置是什么?

json - NewtonSoft 包中的 .NET core 中缺少 JObject

content-management-system - 静态站点生成器上的动态内容