首页 > 解决方案 > 查询 JSON 字段以按变体类型获取产品变体

问题描述

所以我正在开发一个电子商务应用程序,我有一个名为产品变体的表,我在其中使用 jsonb 数据类型动态存储产品变体。我的数据是这样存储的!

variants: {"size": "20","color": "red"},{"size": "30","color": "yellow"}

我想以这样的方式查询变体,以便获得特定产品的特定变体的所有值,如下所示:

size: ["20","30"],color: ["red","yellow"]

我尝试了很多东西,但都没有得到我想要的结果!

标签: ruby-on-railspostgresqle-commercejsonb

解决方案


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

推荐阅读