1

我正在尝试使用元查询从我的 Wordpress 后端获取数据。我正在使用这个插件: https ://www.wpgraphql.com/extenstion-plugins/wpgraphql-meta-query/

我可以在 Wordpress 的 GraphiQL IDE 中运行我的查询,但不能在 Gatsbys GraphiQL 工具中运行。

我收到此错误:字段“Query.allWpPage”上的未知参数“where”

询问:

query test {
  allWpPage(
    where: {metaQuery: {
      relation: OR,
      metaArray: [
        {
          key: "some_value",
          value: null,
          compare: EQUAL_TO
        },
        {key: "some_value",
          value: "536",
          compare: EQUAL_TO
        }
      ]
    }}
  ) {
    edges {
      node {
        id
        uri
      }
    }
  }
}

我试过删除缓存目录并重建,没有帮助。

澄清一下,我在运行其他查询和获取 ACL 数据等方面没有问题。我(现在)唯一的问题是将 where 参数暴露给盖茨比。

4

1 回答 1

1

where过滤器在盖茨比中受到限制。在这里,您有比较器的详细列表,但它们是:

  • eq(等于)
  • ne(不等于)
  • in(包括)
  • nin(不包括)
  • lt, lte, gt, gte(分别小于、等于或小于、大于、等于或大于)
  • regex, glob(正则表达式)
  • elemMatch(元素匹配)

另一方面,有一个可用的过滤器列表。在你的情况下,filter是你正在寻找的。您的最终查询应如下所示:

query test {
  allWpPage(
   filter : {uri : {ne : "" }}
  ) {
    edges {
      node {
        id
        uri
      }
    }
  }
}

当然,filter根据您的需要进行调整。elemMatch也应该为你工作。

您需要为要匹配的对象的每个属性添加每个条件。


为什么受到where限制?

因为它属于 Sift,这是 Gatsby 用来使用MongoDB 查询的库,在哪里where可用。自Gatsby 2.23.0(2020 年 6 月)以来,该库不再使用。历史和筛选的更多细节:

很长一段时间,Gatsby 都使用 Sift 库,通过它您可以在 JavaScript 中使用 MongoDB 查询。

不幸的是,Sift 与 Gatsby 的使用方式不一致,因此编写了一个自定义系统来慢慢替换它。该系统被称为“快速过滤器”,从 gatsby@2.23.0(2020 年 6 月)开始,不再使用 Sift 库。

于 2021-08-26T11:01:19.407 回答