如何使用Sequelize和MySQL在JSON列的选择上使用LOWER?

如何使用Sequelize和MySQL在JSON列的选择上使用LOWER?,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我不确定我是否需要为这个问题进行raw,但我希望不是 我有如下代码: let where = { "foo": "bar" } 然后,我循环遍历可能从查询参数发送的键,这需要在JSON数据类型中进行搜索 const string_json_keys = ['title', 'description']; let jsonHits = []; string_json_keys.forEach(key => { if (params[key]) { let functiona

我不确定我是否需要为这个问题进行raw,但我希望不是

我有如下代码:

let where = {
  "foo": "bar"
}
然后,我循环遍历可能从查询参数发送的键,这需要在JSON数据类型中进行搜索

const string_json_keys = ['title', 'description'];
let jsonHits = [];
string_json_keys.forEach(key => {
  if (params[key]) {
    let functionalWhere = sequelizeInstance.where(sequelizeInstance.fn('lower', sequelizeInstance.col(`metadata->$.${key}`)), params[key].toLowerCase());
    jsonHits.push(functionalWhere);

  }
});

if (jsonHits.length) {
  where[Op.and] = jsonHits;
}
给定一个标题
helloworld
,我想将搜索规范化为所有小写,因为JSON在MySQL中是区分大小写的。意思是我想说
WHERE LOWER(title)=hello world

以上代码转换为

WHERE (lower(`metadata->$`.`title`) = 

我不知道如何根据需要将其更改为一个
元数据->$.title
字符串。我试着用
\
逃离
。但没有成功。

->
JSON\u EXTRACT
的缩写。我需要使用这种方法,然后是降低以得到我想要的。使用
JSON\u UNQUOTE
是为了将我的用户输入字符串与实际字符串进行比较,而不是
“hello world”
的JSON对象。用户不会使用引号进行搜索,因此不会返回任何内容

let extractCall = sequelizeInstance.fn('JSON_EXTRACT', sequelizeInstance.col('metadata'), `$.${key}`);
let unquoteCall = sequelizeInstance.fn('JSON_UNQUOTE', extractCall);
let functionalWhere = sequelizeInstance.where(sequelizeInstance.fn('LOWER', unquoteCall), params[key].toLowerCase());
我还提出了一个允许速记的问题。这将使代码更简洁

我还应该注意到,
JSON\u UNQUOTE
在技术上并不需要满足我正确使用
LOWER
的能力问题,但我认为这是人们想要搜索字符串值与实际JSON对象的共同需要