You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含'+'字符的Hasura GraphQL JSONB查询无结果排查求助

解决Hasura查询JSONB列含'+'字符串无结果的问题

问题根源

核心问题是正则表达式中的'+'属于特殊元字符,未转义时会被解析为「匹配前面字符1次或多次」,而非字面意义的'+'符号,导致查询无法匹配目标字符串;同时直接用字符串匹配JSONB的方式不够精准,容易触发特殊字符的解析异常。

解决方案

以下是按优先级排序的可行修复方式:

1. 直接匹配JSONB子键(最优方案)

如果Hasura已追踪JSONB列fields的payment_pix_code子字段,可直接用_eq精准匹配:

query myQuery {
  deal_search(where: {
    fields: {
      payment_pix_code: {
        _eq: "00020126360014BR+B1"
      }
    }
  }) {
    name
  }
}

若Hasura未自动识别子字段,可在控制台为fields列添加JSONB子字段追踪,或用原生SQL表达式匹配:

query myQuery {
  deal_search(where: {
    _expr: "fields ->> 'payment_pix_code' = '00020126360014BR+B1'"
  }) {
    name
  }
}

2. 使用JSONB的_contains运算符

传入正确的JSON结构而非字符串,规避特殊字符干扰:

query myQuery {
  deal_search(where: {
    fields: {
      _contains: {
        payment_pix_code: "00020126360014BR+B1"
      }
    }
  }) {
    name
  }
}

3. 修复正则表达式的转义

必须对'+'进行双重转义(GraphQL字符串中需用\\+表示字面意义的\+):

query myQuery {
  deal_search(where: {
    fields: {
      _cast: {
        String: {
          _iregex: "\"payment_pix_code\": \"00020126360014BR\\+B1\""
        }
      }
    }
  }) {
    name
  }
}

重要说明

  • 优先选用JSONB原生匹配运算符(_eq/_contains),比正则表达式更高效且不易出错。
  • 正则表达式中的特殊字符(如+、*、.等)必须转义才能匹配字面意义,在GraphQL字符串中需额外添加一个反斜杠完成转义。

内容的提问来源于stack exchange,提问作者Igor Leonir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:15:17