最近需要学习graphql的查询,深入学习一下,做个记录

筛选查询结果/搜索查询

  • 比较运算符
  • 等于运算符(_eq,_neq)
  • 大于或小于运算符(_gt,_lt,_gte,_lte)
  • 基于列表的搜索运算符(_in,_nin)
  • 文本搜索或模式匹配运算符(_like,_like等)
  • JSONB运算符(_contains,_has_key等)
  • PostGIS空间关系运算符(_st_contains,_st_crosses等)
  • 筛选或检查空值(_is_null)
  • RASTER列上的相交运算符(_st_intersects_rast等)

在查询中使用where关键字来过滤筛选结果,如果需要多个参数在同一where可以使用_and _or

这里_eq_gt是比较运算符的示例
要获取一篇文章的评分高于4的作者列表以及这些文章

query {
   author (where: {articles: {rating: {_gt: 4}}}) {
     id
     name
     articles (where: {rating: {_gt: 4}}) {
       id
       title
       rating
     }
   }
 }

_eq是等于运算符,_gt是大于运算符。

比较运算符

让我们看一下可以用来过滤结果的不同比较运算符。
相等运算符_eq_neq
_eq(等于)或_neq(不等于)运算符是与任何相容的Postgres键入以外 jsonjsonB(如IntegerFloatDoubleTextBooleanDate/ Time/ Timestamp等)。

基于列表的搜索运算符_in_nin
_in(在列表中)和_nin(未在列表)运算符用于字段值的比较值的列表。它们是相容的Postgres键入以外 jsonjsonB(如IntegerFloatDoubleTextBooleanDate/ Time/ Timestamp等)。

文本搜索或模式匹配运算符_like_like等)
_like_nlike_ilike_nilike_similar_nsimilar运算符用于对串/文本字段模式匹配。
这些运算符的行为与SQL运算符完全相同

注意

  • _like是区分大小写的。_ilike不区分大小写的搜索。
  • _similar区分大小写

JSONB运算符_contains_has_key等)

_contains_contained_in_has_key_has_any_has_key_所有运算符都用于基于JSONB列进行筛选。

PostGIS空间关系运算符_st_contains_st_crosss等)
_st_crosss_st_equals_st_intersects_st_overlaps_st_touch_st_within_st_d_within的运算符用于基于类似于列的几何体进行筛选。
_st_d_withinst_intersects也可用于geography列。
这里不太懂 应该是几何数组的筛选吧

筛选或检查空值_is_null
可以使用is_null运算符来检查空值。

筛选与条件不符的值(_not)
_not运算符可用于获取某些条件不为真的结果,反转某个条件过滤。

在同一查询中使用多个筛选器_and_or
可以在同一个where参数中对多个参数进行分组,方法是使用_and_or运算符根据多个条件筛选结果。
_add 写法样例

query {
  article (
    where: {
      _and: [
        { published_on: {_gte: "2017-01-01"}},
        { published_on: {_lte: "2017-12-31"}}
      ]
    }
  )
  {
    id
    title
    published_on
  }
}

过滤嵌套对象
where参数可以用于数组关系,也可以用于筛选嵌套对象。对象关系只有一个嵌套对象,因此它们不公开where参数。

嵌套对象字段的筛选
您还可以使用嵌套对象的字段筛选查询结果。

筛选前将字段转换为其他类型_cast
可以使用_cast运算符将字段强制转换为其他类型,这允许在不支持这些类型的字段上使用特定于类型的运算符。目前,只支持PostGIS geometry 和 geography类型之间的转换。
_cast 强制转换类型 对应 SQL类型的强制转换。

真表达式({})
对于所有对象,表达式{}的计算结果都为true。

比较表达式中空值的计算
如果在任何比较表达式中传递了空值(或未定义的值),则该表达式当前将缩减为{}

https://hasura.io/docs/1.0/graphql/manual/index.html