Gatsbyjs 中的 GraphQL - 只有 Return 包含特定字段的数据
GraphQL in Gatsbyjs - Only Return Data Which Contains a Particular Field
我在 GatsbyJs 框架内使用 GraphQL。
我有多个包含 JSON 数据的文件。数据结构类似这样:
{
...,
"sections" / "menuSections"
}
每个文件中的最后一个字段可以是 'sections' 或 'menuSections'。我当前的 graphQL 查询如下所示:
{
allDataJson {
nodes {
menuSections
}
}
}
此查询 return 是正确的 'menuSections',但是,没有 'menuSections' 的数据文件被 return 编辑为 null
。我怎样才能让 GraphQL 仅从包含 'menuSections' 的文件中获取 return 数据,即如何 return 存在 'menuSections' 的数据。我正在寻找像 $exists
.
这样的运算符
GraphQL 中似乎没有 $exists
运算符。相反,您可以做的是在解析器中添加一些逻辑来检查字段是否不为空。我发现了两个与您的问题相关的旧问题:
GraphQL query and check the returned data
GraphQL query: only include field if not null
如果 sections
& menuSections 是字符串或字符串数组,也许你可以过滤 null
:
{
"menuSections": "..."
}
// query
{
allDataJson(filter: {
menuSections: {
ne: null
}
}) {
nodes {
menuSections
}
}
}
如果它们是对象,您仍然可以过滤 null
,但它必须应用于该对象内的字段之一。如果您的对象没有公共字段,这将不起作用:
{
"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
等,但如果过滤器有效,那就简单多了。
我在 GatsbyJs 框架内使用 GraphQL。
我有多个包含 JSON 数据的文件。数据结构类似这样:
{
...,
"sections" / "menuSections"
}
每个文件中的最后一个字段可以是 'sections' 或 'menuSections'。我当前的 graphQL 查询如下所示:
{
allDataJson {
nodes {
menuSections
}
}
}
此查询 return 是正确的 'menuSections',但是,没有 'menuSections' 的数据文件被 return 编辑为 null
。我怎样才能让 GraphQL 仅从包含 'menuSections' 的文件中获取 return 数据,即如何 return 存在 'menuSections' 的数据。我正在寻找像 $exists
.
GraphQL 中似乎没有 $exists
运算符。相反,您可以做的是在解析器中添加一些逻辑来检查字段是否不为空。我发现了两个与您的问题相关的旧问题:
GraphQL query and check the returned data
GraphQL query: only include field if not null
如果 sections
& menuSections 是字符串或字符串数组,也许你可以过滤 null
:
{
"menuSections": "..."
}
// query
{
allDataJson(filter: {
menuSections: {
ne: null
}
}) {
nodes {
menuSections
}
}
}
如果它们是对象,您仍然可以过滤 null
,但它必须应用于该对象内的字段之一。如果您的对象没有公共字段,这将不起作用:
{
"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
等,但如果过滤器有效,那就简单多了。