如何使用Knex将JSON列转为文本实现表关联查询?
解决Knex左关联JSON数组字段报错的问题
报错原因
PostgreSQL 的 json 类型不支持直接使用 = 运算符进行等值比较,这就是出现 operator does not exist: json = json 错误的核心原因。
解决方法
方法1:将JSON字段转为文本类型关联
通过 Knex 的 raw 函数,把两个JSON字段转为文本类型后再做关联判断,代码如下:
const query = knex("countryDetails") .select("*") .leftJoin( "businesses", knex.raw("??::text = ??::text", ["countryDetails.details", "businesses.countries"]) ) .limit(1);
这里 ?? 是 Knex 的字段占位符,::text 是 PostgreSQL 的类型转换语法,将 json 类型转为文本后就能正常使用 = 做等值匹配。
方法2:改用jsonb类型(若允许修改表结构)
如果可以修改表字段类型,把 details 和 countries 字段改为 jsonb 类型,PostgreSQL 的 jsonb 支持直接等值比较,你原来的关联代码就能正常运行,无需修改。
内容的提问来源于stack exchange,提问作者mykoman
相关产品推荐
相关产品推荐

