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

TypeORM对jsonb提取字段做IN查询提示json=json运算符不存在如何解决

错误根因

你使用->运算符从jsonb字段提取值时,返回结果是jsonb类型而非原生标量(数值/字符串等)。PostgreSQL没有内置的json类型相等比较运算符,同时ORM会自动将你In查询中的参数转换为与查询字段匹配的json类型,最终触发operator does not exist: json = json报错。

解决方案

优先推荐第一种方案,性能和兼容性最优:

  • 方案1:修改字段提取逻辑,返回原生标量类型
    将原字段提取语句
company.data -> 'number' as company_number

改为显式转换为你需要的标量类型,比如数值类型可写为:

(company.data ->> 'number')::int as company_number

->>运算符会将json值提取为字符串格式,外层再通过::int强转为整数类型,最终返回的company_number是原生数值类型,可直接用于In条件比较。如果是字符串类型的编号,去掉::int强转即可。

  • 方案2:不改字段提取逻辑,临时兼容查询
    如果暂时无法修改字段提取逻辑,可以将查询参数手动转为json格式匹配:
this.find({ where: { company_number: In([1,2,3].map(item => JSON.stringify(item))) } });

该方案性能较差,仅作为临时兼容使用,不推荐长期使用。

  • 方案3:TypeORM实体字段指定类型
    如果你是通过TypeORM实体定义的company_number虚拟字段,可以在字段注解中显式指定类型为int,ORM会自动处理类型转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:57:04