mysql - 如何使用 knex 从 mysql 中的 ARRAY_AGG 中删除引号
问题描述
我正在使用 knex 并尝试使用 and 查询对象JSON_ARRAYAGG
数组JSON_OBJECT
。不幸的是,返回的整个数组JSON_ARRAYAGG
都用单引号括起来,我似乎无法摆脱它们。
我的查询看起来与此非常相似:
let data = await knex('table1')
.join('table2')
.where({ 'table1.id': id })
.select(
'a',
'b',
knex.raw(
'JSON_ARRAYAGG(json_object("c", c, "d", d)) ->> $.itemArr AS itemArr',
),
)
.groupBy('id');
我尝试过执行以下操作:
->>
运营商,->
+ _JSON_UNQUOTE
knex.raw('CAST(JSON_ARRAYAGG(json_object('c', c, 'd', d)) AS JSON ) AS itemArr')
knex.raw('CAST(JSON_ARRAYAGG(json_object('c', c, 'd', d)) AS itemArr) AS JSON ')
knex.raw('JSON_UNQUOTE(JSON_EXTRACT(JSON_ARRAYAGG(json_object('c', c, 'd', d))), $.specialties) AS JSON ')
我对 mySQL 很陌生,所以我不知道这是否正确,但根据我在 SO 上找到的其他帖子,这些是建议的解决方案。任何帮助,将不胜感激
注意: -> 和 ->> 运算符给了我一个解析错误。
编辑:使用 $.itemArr 作为路径时,我也会收到未知列字段错误。
解决方案
我设法弄清楚该怎么做。我不确定这是否是最有效的方法,但我刚刚结束了以下帖子所做的事情:https ://github.com/knex/knex/issues/2416 。
本质上,我在连接到 knex 时最终添加了以下内容:
typeCast: function (field, next) {
if (field.type === 'JSON') {
return (JSON.parse(field.string()))
}
return next()
}
据我了解,当查询结果是 JSON 类型时,它会自动为我解析。
推荐阅读
- reactjs - IonRangeSlider 不显示
- java - 为 spring boot stomp socket 启用 ws 或 wss
- string - 从一个点读取一个字符串
- java - 如何部署 Java 服务器应用程序?
- php - 尝试从 API 检索数据时未定义过滤数据
- java - 如何使用 JPA/Spring/Hibernate 对表行强制执行写锁定
- kubernetes-ingress - 将网址从 www.example.com/page 重定向到入口中的其他域 www.abc.com/page
- python - Python连接pymongo
- python - Python pandas编辑多行
- angular - 如何将图例中的标签和数据与 Chartjs Angular 对齐