#ruby-on-rails #postgresql #e-commerce #jsonb
#ruby-on-rails #postgresql #электронная коммерция #jsonb
Вопрос:
ИТАК, я разрабатываю приложение для электронной коммерции, и у меня есть таблица под названием варианты продукта, в которой я динамически сохраняю варианты продукта, используя тип данных jsonb.Мои данные хранятся вот так!
variants: {"size": "20","color": "red"},{"size": "30","color": "yellow"}
Я хотел бы запросить варианты таким образом, чтобы я получал все значения определенного варианта для конкретного продукта следующим образом:
size: ["20","30"],color: ["red","yellow"]
Я много чего перепробовал, но не смог получить желаемый результат!
Комментарии:
1. вы уверены в формате JSONB..,*
2. Да! Я уверен в типе данных!
3. Преобразование из:
[{"size": "20", "color": "red"}, {"size": "30", "color": "yellow"}
в{"size": ["20", "30"], "color": ["red", "yellow"]}
— это то, что вам нужно?
Ответ №1:
Преобразование JSONB из
[{"size": "20", "color": "red"}, {"size": "30", "color": "yellow"}]
Для
{"size": ["20", "30"], "color": ["red", "yellow"]}
Запрос PostgreSQL:
select jsonb_object_agg(a, bs) from (
select a, jsonb_agg(b) as bs from (
select (jsonb_each(o)).* from (
select v from jsonb_array_elements(
'[{"size": "20", "color": "red"}, {"size": "30", "color": "yellow"}]'::jsonb
) t(v)
) t(o)
) tt(a, b)
group by a
) ttt