如何使用TypeORM执行指定的MySQL JSON字段精确匹配查询?
正确的TypeORM查询写法
你遇到的错误是因为直接在where里嵌套对象时,TypeORM会把modelType识别为表的列,而非JSON字段settings中的属性。要实现原MySQL查询的逻辑,可通过以下方式编写:
方法一:使用Raw函数编写原生SQL片段
直接复用原MySQL的JSON比较逻辑,通过TypeORM的Raw函数嵌入原生SQL:
import { Raw } from "typeorm"; // 执行查询 repository.find({ where: { settings: Raw(alias => `${alias} = JSON_OBJECT('modelType', JSON_ARRAY('ACTION'))`) } });
这个写法会生成和你目标SQL完全一致的查询语句,Raw函数中的alias参数会自动替换为settings列名,避免硬编码表或列名的问题。
补充说明
如果你的需求是匹配settings中modelType数组包含ACTION(而非完全等于整个JSON对象),可改用JSON_CONTAINS:
repository.find({ where: { settings: Raw(alias => `JSON_CONTAINS(${alias}->>'$.modelType', '["ACTION"]')`) } });
内容的提问来源于stack exchange,提问作者María Gregorio
相关产品推荐
相关产品推荐

