Запрос поля JSON для получения вариантов продукта по типу варианта

#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