最近需要学习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键入以外 json或jsonB(如Integer
,Float
,Double
,Text
,Boolean
, Date/ Time/ Timestamp
等)。
基于列表的搜索运算符(_in
,_nin
)
将_in
(在列表中)和_nin
(未在列表)运算符用于字段值的比较值的列表。它们是相容的Postgres键入以外 json或jsonB(如Integer
,Float
,Double
,Text
,Boolean
, Date/ 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_within
和st_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