我不确定我是否需要去原始的,但我希望不是。
我有这样的代码:
let where = {
"foo": "bar"
}
然后,我循环遍历可能从查询param发送的键,这些键需要在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;
}
给一个头衔 Hello World
我想将搜索规范化为所有小写,因为json在mysql中是区分大小写的。意思是我想说 WHERE LOWER(title) = hello world
.
以上代码转换为
WHERE (lower(`metadata->$`.`title`) =
我不知道怎么把它改成一串 metadata->$.title
根据需要。我试着逃走 .
与 \.
但是没有运气。
1条答案
按热度按时间pdsfdshx1#
->
是的缩写JSON_EXTRACT
. 我需要用那个方法,然后再降低,得到我想要的。使用JSON_UNQUOTE
这样我就可以将用户输入字符串与实际字符串进行比较,而不是"hello world"
. 用户不会使用引号进行搜索,因此不会返回任何内容。我还提出了一个允许速记的问题https://github.com/sequelize/sequelize/issues/9332. 这将使代码更干净一些。
我还应该注意
JSON_UNQUOTE
从技术上讲,我不需要满足我的问题,我的能力,以正确使用LOWER
,但我认为人们通常需要搜索字符串值和实际的json对象。