我在 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/