如何在 MySQL (Knex/Bookshelf) 的 JSON 字段中搜索子字符串?

How do I search for a substring in a JSON field in MySQL (Knex/Bookshelf)?

我正在使用 Bookshelf/Knex 作为 ORM。我有一个 MySQL 数据库,其中有一个 table,其中有一个名为 "data." 的 JSON 字段 在该字段内,有一个键 "title" 和一个键"message." 我想 return 在 data.title 或 data.message 中具有子字符串 "searchString" 的所有行。我该怎么做?

这行得通吗?

qb.raw(`data->'title' LIKE ${searchString} OR data->'message LIKE ${searchString}`)

这个有效:

const results = await new Modelname()
                .query((qb) => {
                        qb.whereRaw(
                           `JSONColumnName->
                               '$.JSONFieldName' LIKE "%${searchString}%"`)
                })
                .fetch();

"JSONColumnName" 是 JSON 列的名称,"JSONFieldName" 是该列中某些 JSON 字段的名称。

这是没有SQL注入孔的方法:

const results = await new Modelname()
                .query((qb) => {
                        qb.whereRaw(
                           `JSONColumnName->
                               '$.JSONFieldName' LIKE ?`, [`%${searchString}%`])
                })
                .fetch();