如何在GraphQL中正确查询可为null的字段及满足_gt条件的记录
问题根源
你遇到的报错是因为绝大多数支持时间类型筛选的GraphQL接口,会校验时间字段筛选值的格式,直接写endDate: null会被识别为不符合时间格式要求的非法值,因此抛出Invalid format, expected a timestamp or an ISO date错误。
正确查询写法
根据你使用的后端服务不同,对应替换空值筛选逻辑即可,以下是两种最常见场景的正确写法:
适用于Strapi v3/Hasura等旧版本GraphQL接口
使用字段后缀_null作为空值筛选标识:
query GetBanner { foo( sort: "posicao:asc", where: { startDate_lt: "2021-10-13T21:13:16.510Z", _or: [ { endDate_gt: "2021-10-13T21:13:16.510Z"}, { endDate_null: true } ] } ) { id created_at updated_at startDate endDate } }
适用于Strapi v4等新版本GraphQL接口
使用嵌套的null操作符实现空值筛选:
query GetBanner { foo( sort: ["posicao:asc"], filters: { startDate: { lt: "2021-10-13T21:13:16.510Z" }, _or: [ { endDate: { gt: "2021-10-13T21:13:16.510Z" } }, { endDate: { null: true } } ] } ) { id createdAt updatedAt startDate endDate } }
补充说明
- 若你使用的是其他后端服务,可直接查阅对应平台的GraphQL筛选文档,找到空值判断的专用操作符即可,不要直接将
null作为时间字段的筛选值传入。 - 部分平台的空值筛选操作符为
_is_null,写法为{ endDate: { _is_null: true } },也可实现相同效果。
内容的提问来源于stack exchange,提问作者Alecell
相关产品推荐
相关产品推荐

