Как добавить скобки в group_concat с помощью knex

#mysql #arrays #json #string #knex.js

#mysql #sql #массивы #json #строка

Вопрос:

Привет, ребята, я использую knex с MySQL. Я хочу добавить скобки в свое поле. Я использую group_concat, но получаю ответ без скобок

 knex('cardex').rightJoin('cardex_agelimit' , 'cardex.id' , 'cardex_agelimit.CardexId')
.select( knex.raw('group_concat( DISTINCT (ages.AgeTitle) ) as ages , group_concat( DISTINCT (days.DayName) ) as days '))
.then(data=>{ console.log(data) }).catch(err=>{})
  

и результат выглядит так :

 {
"ages" : "Adult,Teenager"
"days" : "Mon,Tue"
}
  

но я ищу способ показать это как:

 {
"ages" : ["Adult","Teenager"]
"days" : ["Mon","Tue"]
}
  

Есть идеи?

Ответ №1:

Вы можете вручную добавить квадратные скобки вокруг значений:

 concat('[', group_concat(distinct ages.AgeTitle), ']')  as ages,
concat('[', group_concat(distinct ages.DayName ), ']')  as days
  

Но итог: если вам нужен вывод json, вы можете сгенерировать его непосредственно из базы данных — с одним ограничением, которое не поддерживают агрегированные функции json distinct . Если это приемлемо для вас, то:

 json_object(
    'ages', json_arrayagg(ages.AgeTitle),
    'days', json_arrayagg(ages.DayName)
)