【问题标题】:How to remove quotes from ARRAY_AGG in mysql using knex如何使用 knex 从 mysql 中的 ARRAY_AGG 中删除引号
【发布时间】:2021-12-17 06:42:00
【问题描述】:

我正在使用 knex 并尝试使用 JSON_ARRAYAGGJSON_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');

我尝试过以下操作:

  1. ->> 运算符,
  2. -> + JSON_UNQUOTE
  3. knex.raw('CAST(JSON_ARRAYAGG(json_object('c', c, 'd', d)) AS JSON ) AS itemArr')
  4. knex.raw('CAST(JSON_ARRAYAGG(json_object('c', c, 'd', d)) AS itemArr) AS JSON ')
  5. knex.raw('JSON_UNQUOTE(JSON_EXTRACT(JSON_ARRAYAGG(json_object('c', c, 'd', d))), $.specialties) AS JSON ')

我对 mySQL 很陌生,所以我不知道这是否正确,但根据我在 SO 上找到的其他帖子,这些是建议的解决方案。任何帮助将不胜感激

注意:-> 和 ->> 运算符给了我一个解析错误。

编辑:当我使用 $.itemArr 作为路径时,我也得到一个未知的列字段错误。

【问题讨论】:

  • 向我们展示一些示例数据和表格、您当前的查询输出和您的预期输出。

标签: mysql knex.js mysql-json


【解决方案1】:

我设法弄清楚该怎么做。我不确定这是否是最有效的方法,但我刚刚结束了以下帖子所做的事情:https://github.com/knex/knex/issues/2416

基本上,我在连接到 knex 时添加了以下内容:

typeCast: function (field, next) {
      if (field.type === 'JSON') {
        return (JSON.parse(field.string()))
      }
      return next()
    }

据我了解,当查询结果是 JSON 类型时,它会自动为我解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2019-03-17
    • 2017-07-26
    • 2021-04-11
    • 2020-04-12
    • 2022-01-08
    • 2010-09-05
    相关资源
    最近更新 更多