使用bookshelf或Knex ORM在MySQL JSON列数据类型中选择特定字段

使用bookshelf或Knex ORM在MySQL JSON列数据类型中选择特定字段,mysql,node.js,orm,knex.js,bookshelf.js,Mysql,Node.js,Orm,Knex.js,Bookshelf.js,假设我有以下MySQL表结构: ========================================================== |id |姓名|地址| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |1 | Dawn |{“州”:“马里兰州”,“市”:“安纳波利斯”}| |2 | Pablo |{“州”:“俄亥俄州”,“市”:“哥伦布”}| 地址列是json类型的。我在我的应用程序中使用了书架和knex

假设我有以下MySQL表结构:

========================================================== |id |姓名|地址| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

|1 | Dawn |{“州”:“马里兰州”,“市”:“安纳波利斯”}| |2 | Pablo |{“州”:“俄亥俄州”,“市”:“哥伦布”}| 地址列是json类型的。我在我的应用程序中使用了书架和knex ORM,我需要进行查询,以便它将获取名称和州名称,而不包含城市。 我的普通SQL查询如下所示:

// select name, address->"$.state" from user
knex('user').select('name', knex.raw('??->"$.state"', ['address']))

// select name, json_extract(address, "$.state") from user
knex('user').select('name', knex.raw('json_extract(??, "$.state")', ['address']))
选择名称、地址->“$.state” 来自用户

选择名称,json_extract(地址,“$.state”) 来自用户

但当我使用书架时: user.select('name','address->“$.state”')。fetch()。然后(…)

由于quote和backtick格式,SQL命令中出现无效错误。 使用bookshelf生成的SQL如下:

从“用户”中选择“地址->\”。“状态\”,“名称”

有没有关于避免圆点(.)字符周围的反勾号问题的建议??或者其他方法


PS:这只是一个示例

您可以生成如下查询:

// select name, address->"$.state" from user
knex('user').select('name', knex.raw('??->"$.state"', ['address']))

// select name, json_extract(address, "$.state") from user
knex('user').select('name', knex.raw('json_extract(??, "$.state")', ['address']))

@andrewmclagan你在这里可能会有所帮助!!